The Linux BIOS
R. Minnich and J. Hendricks and D. Webster,
4th Annual Linux Showcase & Conference, August 2000
Key: G201

(Summary by George Candea)

Existing BIOS problems:

There are six steps involved in starting LinuxBIOS. Currently, a typical PC BIOS boots up emulating the 16-bit 8086. Instead, LinuxBIOS transitions to 32-bit mode immediately. Protected mode setup is 17 instructions and involves initalizing the segmentation, paging and TLB hardware, after which it switches to protected mode. This is followed by DRAM setup, transition to C mode, mainboard fixup (hardware initialization required to finish loading the kernel), and then gunzipping the kernel and loading it to the platform-dependent standard memory address location. Finally, it does a direct jump to startup_32().

Once the kernel is booted, it can connect via SSH to a DHCP server, get its node identity, and then boot a kernel of choice (the one in NVRAM, or one that is SSH-ed over, or one from disk, etc.) Note that, unlike with normal BIOSes, if some failure occurs (e.g., disk is dead), the initial kernel can report the error to the remote administrator instead of giving up. The DHCP server could tell the kernel to mount its root over NFS, AFS, Coda, etc. An interesting management feature is to open an HTTP port and allow LinuxBIOS to be managed from a web browser. In a cluster environment, it is also possible to multicast kernel and disk images to the nodes.

A boot alternative is for the kernel to open a SSH port and wait for remote instructions, such as changing LinuxBIOS parameters or installing a new kernel. NVRAMs that house BIOSes these days have 1 MByte, and will soon have 2 MBytes; this opens the possibility to have a backup kernel in case we update the first kernel with a bad one.

LinuxBIOS takes less than one second to go from power-off to the point where it mounts the root.