Table of Contents
Daniel Verkamp: COMBOOT Support
Notes
COMBOOT
- What should happen if/when a COMBOOT executable returns? Do any other image types ever return?
Basic COMBOOT execution sequence
- Detect image type (.com/.cbt → 16-bit COMBOOT; .c32 or magic number B8 FF 4C CD 21 → COM32) - case-insensitive filenames?
16-bit COMBOOT
- Copy image to offset 0x100 of some segment
- Set up PSP in same segment
- Set up IDT entries to point at COMBOOT API implementation (stubs in lowmem to call actual protected-mode implementation?)
- Change to real mode
- Set segment registers CS = DS = ES = SS to segment containing PSP and code
- Set SP to 0xfffe (end of 64k segment)
- Near call 0x100 (start executing)
COM32
- Copy image to virtual address 0x101000
- Set DS = ES = SS to the same base as CS (flat address space)
- Set FS = GS = 0
- Set ESP to end of available memory
- Allocate bounce buffer in lowmem
- Push args onto stack (helper functions, bounce buffer, other args from user)
- Call entry point
Development and Testing Environment
QEMU
New option in QEMU 0.9.1:
-bootp file advertise file in BOOTP replies
Example command (modified contrib/bochs/qemu.sh):
qemu -net nic,model=rtl8139 -net user -boot a -fda ../../src/bin/rtl8139.pdsk -bootp http://server/file.gpxe
This way there is no need for TFTP or DHCP servers when testing in QEMU.
Real Hardware
Development machines:
- “sequoia”, Pentium 4 2.40 GHz, 1 GB RAM (Gentoo Linux)
- “maple”, Athlon X2 4200+, 2 GB RAM (Windows Vista Ultimate 32-bit)
Server machine (DHCP, HTTP, TFTP, etc.):
- “pine”, Pentium III 1.0 GHz, 256 MB RAM (Gentoo Linux)
“Guinea pig” machines:
- “tulip”, Athlon XP 2100+, 768 MB RAM
- “spruce”, Pentium II, 256 MB RAM
- Pentium 133 MHz, 16 MB RAM
Network cards (PCI):
- 3Com 3C905-TX (3C905-B)
- Linksys LNE100TX (DEC 21140 based)
- SMC EtherPower 10/100 9332DST (DEC 21140 based)
- HP J2585B 10/100vg (not supported by Etherboot/gPXE; ancient )