Guides to FreeBSD and Linux bootstrapping on x86


I have recently been looking at x86 bootup procedures to see what kind of fun can be had. Generically, information pills
all x86 systems start up by loading the contents of the BIOS EEPROM to a known ram location with known offsets for various I/O routines. All of this is done in real mode. Once the BIOS is loaded and the system hardware is probed, info
the boot drive is selected. The initial boot loader (boot0 on BSD) is located on the first 512 byte block of the device with the first word being an instruction and the last word being the magic number 0xAA55. This block is known as the master boot record. After the initial bootloader is loaded, it copies its self to a lower memory address and locates the secondary boot loader (boot1 on BSD, lilo or GRUB on Linux). From the secondary loader on, the boot up is pretty specific, resulting in loading the kernel, drivers and the filesystems for the target operating system. Below are links to two guides that deal with the bootstrapping in depth. Image above is from

( Chapter 2: FreeBSD System Programming )

( From power-up to bash prompt )

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>