I have released Etherboot 4.5.5 at http://www.slug.org.au/etherboot/ No, that is not a typo, this is a 4.5 release. The reason is Klaus Espenlaub just did a fantastic job of reorganisation, rewriting, bug fixing, and adding new features to Etherboot that I feel justified in starting a new series. 4.5 will be a development series leading to 4.6. The 4.4 series will not be updated anymore except to backport any critical bug fixes to 4.4. Hopefully within an iteration or two we can get all the major glitches out and go to 4.6. So if you have a stake in using Etherboot, please test this. I attach his extensive notes at the bottom, but I want to mention the major features: + Booting via NFS in addition to TFTP + Lance driver works for PCI Lance under VMware (could users with real PCI Lance NICs please test?) + Rewrite of Makefiles, no more src-32 and src-16. + Rewrite of ELF and a.out loading + Comload fixed. MD5sums: 47a12fa5d9af686d1d079186c4f41bfe etherboot-4.5.5.tar.bz2 0c790b9158d33f03aceb299369bd046e etherboot-4.5.5.tar.gz Klaus Espenlaub's notes: The biggest change is the almost rewritten Makefiles (both in src and in doc - the one in doc is still reasonably simple). If you want to get an overview - basically one Makefile now builds both /16 and /32 ROMs. This involves quite a few make variables (similarly in Config), but it should be mostly self-explaining. I also converted the suffix rules to pattern rules, because it is the only way to keep the build directories for /16 and /32 apart. Generally all /32 code is compiled in bin32, all /16 code is compiled in bin16, and the code that works for both is in bin. The names (object files, images, but NOT the final ROMs) used during the build process for some PCI cards have changed (especially lancepci and nepci). I eliminated the driver.a file by adding yet more ugly code to genrules.pl (no, I'm not very proud of the code I added there - I hate perl, but at least it works), which now generates all sorts of make rules and dependency information. This eliminates the redundant recompile of all other drivers if you specified a specific target at the make command line. There are now automatic checks for the generated ROM size (3K safety margin are used to allow for 1K BIOS EBDA and 2K stack). This should avoid most of the cases in which the stack overwrites code and/or data, causing strange crashes. On to the real code - I rewrote both the ELF and a.out loading (the blocksize is now properly handled for all formats), and now most of the code is identical. Someone might want to merge the two. I verified that both a.out and ELF FreeBSD loading still works by booting the FreeBSD 2.2.8 and 3.4 install kernels (the ELF kernel you gave me didn't work for whatever reason). Actually I tested everything except NBI, but that code is completely unchanged. I eliminated config.h and created cards.h - just have a look and you should get the idea. The PCI/ISA prototype matching hack is now buried in there. All PCI drivers (and skel.c) have been converted to the new include file. The only file that is really new is nfs.c, which contains the code where I started my journey. The loader code is now merged into one file for both the normal and compressed case. Some bugs have been fixed along the way (the normal loader copied too much data, potentially crashing the machine). BTW: I removed the block copy from comboot, because the first thing the loader code does is - to copy the code to the right place. Also copying it to 0x80000 prevents compressed ROMs (though there is no way in the Makefile to create such a beast). Also the stack changing code was wrong - the overflow handling is missing: 0x9fxxxx-0x800000 is truncated to fit in the 16 bit register, which is not quite what one would expect. The stack pointer must be in the same segment, so for overflows just load 0. Anyway, we don't need a new stack for 4 bytes (the return address). Also the shifts won't work on an 8086/8088. The ROM segment and length code is also done once more in loader.S. Finally the org 0x100 didn't work with my version of as86 - it prepended 256 null bytes. Don't get me wrong - I see that comboot was just a quick and dirty hack. It's now working... I also fixed floppyload to read exactly the right amount of data (not up to 65520 bytes more like the Linux code did) and ripped out some unused code. 3c509.c: includes fixed, const added, static added, removed redundant code 3c90x.c: includes fixed, const added, shortened messages to save space, made the transceiver selection bootrom fix optional (default: off), updated 3c90x.txt ansiesc.c: de-tftpified (now uses "download") config.c: moved the driver prototypes to separate file, added a few const cs89x0.c: ansified, const added, fixed timeout handling eepro100.c: includes fixed, const added, static added, USE_INTERNAL_BUFFER hack, passing globals as a parameter removed, timeout handling fixed, comments fixed epic100.c: comments fixed, const added, static added, USE_INTERNAL_BUFFER hack, removed unused variables, changed debug code to use macro instead of variable, allow broadcasts to be received (after all how did it work before???) etherboot.h: dual/serial console "cleanups", added NFS support, fixed INTERNAL_BOOTP_DATA for pathologic cases, removed prototype within comment (how did that end up there?), moved prototypes for config.c code here, added consts all over the place floppy.c: added static, changed cleanup code floppyload.S: renamed from .asm genrules.pl: I didn't write this :) i82586.c: fixed includes, added const lance.c: fixed DMA for PCI cards, removed leftovers from Linux driver, USE_INTERNAL_BUFFER hack linux-asm-io.h: added prototypes linux-asm-string.h: added prototypes loader.S: renamed from loader.asm, more comments see elsewhere in this mail loader.inc: removed main.c: includes fixed, static and const added, Etherboot/32 now prints relocaddr, hooks for NFS support, drain the Rx queue in some strategic places (after sleep), changed interface to await_reply: timeout handling, new cleanup code misc.c: ansified, twiddle code changed, strcasecmp enabled for Etherboot/16 (smaller than the 16 bit libc version), clear A20 before kernel is started (only for NBI), dual console fixes, removed bogus comment about interrupt enabling using iskey() nic.h: include guard added, added const ns8390.c: fixed includes for PCI version, added const, ansified, renamed internal functions osdep.h: removed #include <asm/byteorder.h> - probably all #ifdef __linux__ and __FreeBSD__ may be removed now. osloader.c: see elsewhere in this mail. removed loads of debugging code. otulip.c: removed unused variables, USE_INTERNAL_BUFFER hack, ansified, added const otultip.h: added const pci.c: fixed signed comparison pci.h: include guard added, const added rtl8139.c: static added, const added, globals are no longer passes as parameters, fixed probe loop serial.S: removed the Makefile hack to calculate the divisor and replace it by a CPP hack sk_g16.c: added static/const skel.c: updated smc9000.c: fixed includes, added const, fixed timeout, removed unused variables start16.S: changed stack pointer reloading start32.S: cleaned up GAS295 support, fixed CPU detection, fixed memsize for > 64MB, added basememsize() tiara.c: fixed includes, added const, removed unused variable tulip.c: fixed includes, added const, decreased oversized frame tolerance, USE_INTERNAL_BUFFER hack, converted to C comments, fixed prototypes, removed unused variable via-rhine.c: fixed includes, converted to C comments, removed unused functions, fixed timeout, USE_INTERNAL_BUFFER hack, removed unused variable, const added lzhuf.c was modified not to output ':' characters, because I find it useful to search for them in a make log to spot all error messages. Finally all symlinks have gone I fixed sgml/vendortags.sgml (maybe it's more a workaround): sgml2txt didn't like the ~~' sequence and ignored a whole line, making the .txt file incomplete. Also freebsd.txt was converted to sgml. My standard patch to netboot-0.8.1/configure (to remove the "unknown") is again in place - how is this file created? By hand? I added serial/dual console support to mknbi-linux. Oh, and something I almost forgot: Etherboot now works under VMware. VMware has a rather large EBDA (3K instead of 1K like most other BIOS versions), so one might have to sacrifice a few nifty options. Note that the Makefile check cannot detect this - maybe we should add a runtime check, too? One thing that doesn't work with VMware is the "Boot Local" stuff - it's not terribly useful if you have to boot from disk, but it shouldn't crash the machine (I've seen several triple faults, depending on RELOCADDR and the stack usage). I tracked it down to the fact that VMware crashes on int 0x19 if the memory area 0x98000-0x9f3ff is overwritten. If one changes RELOCADDR to 0x8f000, everything works nicely. Someone should report the bug to VMware. Also proper boot ROM support should be added to VMware and they should upgrade the virtual card to 100Mbps (don't laugh - they limit the bandwidth to 10Mbps even if you have a real 100Mbps card!). Maybe one could even use the flash utility for the recent AMD PCnet cards... =========================================================================== This Mail was sent to netboot mailing list by: Ken Yap <ken@nlc.net.au> To get help about this list, send a mail with 'help' as the only string in it's body to majordomo@baghira.han.de. If you have problems with this list, send a mail to netboot-owner@baghira.han.de.
For requests or suggestions regarding this mailing list archive please write to netboot@gkminix.han.de.