I have taken the next major step in moving etherboot to an
architecture I can work with.
A summary of the recent changes:
- An ide driver that loads images from disk in the url
you can pass it an offset on disk to load from.
- The udelay, mdelay macros have been consolidated into timer.h
Delays in absolute time are easier to maintain.
- The multicast tftp client has been merged but not yet tested.
- I have added a loader for 64bit ELF images, this will allow
me to have offsets to random disk locations.
- The multicast changes for lance.c have been merged.
- heap.c which implements a very simple heap has been added.
- getdec has been renamed strtoul, and the parameters changed
slightly. I had to many places I was reading a value into
a unsigned value, and it was much more convient to get 0
instead of -1.
- We now warn on unused variables. And a macro __unused has
been added to shut up gcc about specific variables we know
will be unused. This allows the compiler help to trim the code size.
- The lance multicast changes have been merged.
- The elf defines have been moved out to elf.h
- main.c has been changed so that we can unconditionally call cleanup
before calling a loaded program. It now will reprobe/reinit the nic
if the program returns. A little safer, and a little simpler for the
clients.
- The elf32 loader in osloader has been factored, to allow more code
sharing. Mostly between the elf32 and the elf64 loader. But now we
check to see if the memory regions are valid for a.out, elf, and
tagged images, with the same code.
- _int10 has been removed from pcbios.S, it was only used with
ANSIESC defined.
- slam has been updated to use allot & forget.
- The image loader has been broken into two seperate callable parts.
probe & load. This allows me to attempt loading from multiple
places on a disk without generating lots of error messages.
- A few small fixes to start32.S I'm almost to the point where it will
work under a normal bios again.
- I have uinlined waiton_timer2.
- Added code to parse an ELF PT_NOTE segment, so we can handle various
control conditions. Currently I can handles notes for the program
name, version, and an image checksum.
The checksum code has routinely catches my debugging mistakes before
the machine crashes, and is probably a good early warning system,
for other kinds of errors. I designed it originally because I have
cases where I don't know what is corrupting a kernel that is coming
over the wire.
The TODO list is getting smaller.
Remaing big items;
1) Seperate out the generic disk loading code from ide_disk.c
2) Make ide_disk auto-detect pci ide controllers, instead of
hard coding ports.
3) Allow selecting the boot order between devices.
4) Make it work under a standard pcbios again.
5) Test, test, test.
Eric
|