前面说了,内核引导程序bootloader有很多版本,最流行的是grub和lilo。不管什么bootloader,其引导过程主要分两个阶段:主引导程序(MBR);活动分区引导记录中的次引导程序。
主引导程序是一个块(扇区),所以是512字节,它包含446字节的程序代码和64字节的分区表,最后还有2个字节,固定是0xAA55,用于检测MBR是否有效。
其中的程序代码执行扫描分区表,寻址活动分区,将位于活动分区的引导记录中的次引导程序加载到内存中并执行。
次引导程序负责加载Linux内核映像,并将控制权转交给内核。内核被加载到内存中并获得控制权之后,内核阶段开始工作。
假设我们使用最常用的grub作为bootloader,则/boot/grub/grub.conf文件作为其配置文件,它的内容如下:
[root@localhost grub]# cat grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/rootVG/root
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-194.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/rootVG/root elevator=noop rhgb quiet
initrd /initrd-2.6.18-194.el5.img
这个配置文件提供相关信息给grub程序,grub的次引导程序通过它将内核映像加载到内存0x00007c00开始的位置,然后跳转到此处执行该处的代码。倒数第二行kernel命令的第一个参数:vmlinuz-2.6.18-194.el5,就是内核的压缩映像。