I looked into the history of SYSLINUX & PXE tooling around the time Windows 8 was making its way into the world. EFI was forcefully replacing BIOS machines, and multi-boot options were pretty limited. These are the notes I had.


SYSLINUX, used for booting from FAT and NTFS filesystems (such as floppy disks and USB drives). ISOLINUX, used for booting from CD-ROM ISO 9660 filesystems. PXELINUX, used for booting from a network server using the Preboot Execution Environment (PXE) system. EXTLINUX, used to boot from Linux ext2/ext3/ext4 or btrfs filesystems. MEMDISK, used to boot older operating systems like MS-DOS from these media.

EXTLINUX merged into SYSLINUX with version 4.


BIOS Booting & Modes

NO EMULATION MODE The boot information is stored directly on the CD (not in a floppy image). This mode uses ISOLINUX.

ISOLinux can directly boot disk image files but the BIOS support for this can be very sketchy. Not all BIOS support the INT 13h 4Ch disk emulation interrupt. http://www.oldlinux.org/Linux.old/docs/interrupts/int-html/rb-0720.htm

MEMDISK does not inherit those compatibility problems because MEMDISK simulates a disk by claiming a chunk of high memory for the disk and a (very small - 2K typical) chunk of low (DOS) memory for the driver itself, then hooking the INT 13h (disk driver) and INT 15h (memory query) BIOS interrupts.

Original ISOHybrid implementation takes an ISO image, adds an x86 partition table + boot sector + some fiddling so you simultaneously have a valid ISO image and an image you can dd straight to a disk.


EFI Booting & Modes


PXE, gPXE, & iPXE History & Booting

https://www.youtube.com/watch?v=GofOqhO6VVM

Etherboot project started in 1994

PXE spec started in 1999.

Etherboot project had to follow PXE, industry was totally PXE driven. So Etherboot created an open source PXE implementation. And HPA was being dragged into troubleshooting broken PXE stacks via his work on the SYSLINUX project, floppy based then. HPA took SYSLINUX, intended for floppies, and ported into PXELINUX. Rom-O-Matic.net created around 2000. Boot rom vending machine. The Etherboot mailing list was full of people trying to get to the project but not wanting to compile things.

Etherboot was forked to gpxe.org, Etherboot project leader quit, Marty took over & moved gpxe back. They embraced and extended the PXE standard, added a TCP stack, an http stack. Was less than 2kb of code, crazy. Got involved with the Google Summer of Code, been involved for three+ years.

gPXE hooks the BIOS and fakes an additional disk in the system (int 13h). Needs a driver to get a proper OS to recognize it, same situation with memdisk. They drop a table in base memory and have the driver scan for it, has the info needed to find the disk.

gPXE will scale better than regular PXE due to the advantages of TCP over TFTP How does gPXE work with integrated ethernet?