Daniel Verkamp: COMBOOT Support



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
  1. Copy image to offset 0x100 of some segment
  2. Set up PSP in same segment
  3. Set up IDT entries to point at COMBOOT API implementation (stubs in lowmem to call actual protected-mode implementation?)
  4. Change to real mode
  5. Set segment registers CS = DS = ES = SS to segment containing PSP and code
  6. Set SP to 0xfffe (end of 64k segment)
  7. Near call 0x100 (start executing)
  1. Copy image to virtual address 0x101000
  2. Set DS = ES = SS to the same base as CS (flat address space)
  3. Set FS = GS = 0
  4. Set ESP to end of available memory
  5. Allocate bounce buffer in lowmem
  6. Push args onto stack (helper functions, bounce buffer, other args from user)
  7. Call entry point

Development and Testing Environment


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 :-) )

QR Code
QR Code soc:2008:dverkamp:notes:start (generated for current page)