Take a look at the file /boot/boot0
.
This is a small 512-byte file, and it is exactly what FreeBSD's
installation procedure wrote to your harddisk's MBR if you chose
the “bootmanager” option at installation
time.
As mentioned previously, the INT 0x19
instruction loads an MBR, i.e., the boot0
content, into the memory at address 0x7c00. Taking a look at
the file sys/boot/i386/boot0/boot0.S
can
give a guess at what is happening there - this is the boot
manager, which is an awesome piece of code written by Robert
Nordier.
The MBR, or, boot0
, has a special
structure starting from offset 0x1be, called the
partition table. It has 4 records of 16
bytes each, called partition records, which
represent how the harddisk(s) are partitioned, or, in FreeBSD's
terminology, sliced. One byte of those 16 says whether a
partition (slice) is bootable or not. Exactly one record must
have that flag set, otherwise boot0
's code
will refuse to proceed.
A partition record has the following fields:
the 1-byte filesystem type
the 1-byte bootable flag
the 6 byte descriptor in CHS format
the 8 byte descriptor in LBA format
A partition record descriptor has the information about where exactly the partition resides on the drive. Both descriptors, LBA and CHS, describe the same information, but in different ways: LBA (Logical Block Addressing) has the starting sector for the partition and the partition's length, while CHS (Cylinder Head Sector) has coordinates for the first and last sectors of the partition.
The boot manager scans the partition table and prints the
menu on the screen so the user can select what disk and what
slice to boot. By pressing an appropriate key,
boot0
performs the following
actions:
modifies the bootable flag for the selected partition to make it bootable, and clears the previous
saves itself to disk to remember what partition (slice) has been selected so to use it as the default on the next boot
loads the first sector of the selected partition (slice) into memory and jumps there
What kind of data should reside on the very first sector of
a bootable partition (slice), in our case, a FreeBSD slice? As
you may have already guessed, it is
boot2
.
This, and other documents, can be downloaded from http://ftp.FreeBSD.org/pub/FreeBSD/doc/
For questions about FreeBSD, read the
documentation before
contacting <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.