7.5.2 GRUB
现在有很多商业Linux发行版都使用GRUB作为引导装入程序。GRUB(Grand Unified Bootlosder)是一个GNU项目,提供了许多Lilo所没有的特性。GRUB和Lilo之间最大的不同是,GRUB能够理解文件系统和内核映像格式。而且,GRUB可以在启动时读取和修改其配置选项。GRUB也支持通过网络启动,这在嵌入式环境中极为有用。GRUB在启动时会提供一个命令行接口,利用此接口,就可以在启动过程中修改配置参数。
与Lilo一样,GRUB也通过一个配置文件进行驱动。但是和Lilo的静态配置有些不一样,GRUB引导装入程序在启动时读取这个配置。这意味着可以根据不同的系统配置,在启动过程中进行修改。
代码清单7-11给出一个GRUB配置文件的示例,这个配置文件取自PC机。GRUB的配置文件名为grub.conf,通常存放在一个专门存储启动映像文件的小分区中。在本例的配置文件所在的机器里,这个目录是/boot。
代码清单7-11 GRUB 配置文件示例:grub.conf
- default=0
- timeout=3
- splashimage=(hd0,1)/grub/splash.xpm.gz
- title Fedora Core 2 (2.6.9)
- root (hd0,1)
- kernel /bzImage-2.6.9 ro root=LABEL=/ rhgb proto=imps quiet
- initrd /initrd-2.6.9.img
- title Fedora Core (2.6.5-1.358)
- root (hd0,1)
- kernel /vmlinuz-2.6.5-1.358 ro root=LABEL=/ rhgb quiet
- title That Other OS
- rootnoverify (hd0,0)
- chainloader +1
GRUB首先给用户列出可启动的映像。代码清单7-11中的title是用户可以看到的映像名。default标签指定在给定时间内(本例为3s)不进行选择将自动启动的映像。映像的序号从0开始计数。
与Lilo不同,GRUB可以读取一个给定分区上的文件系统,并载入映像。root标签符指定根分区,grub.conf配置文件中的所有文件名都在根分区中。在本例所示的配置中,根是第1块磁盘的第1个分区,用root(hd0,1)表示。分区从0开始计数,这里指的是第1块磁盘的第2个分区。
映像被指定为与所指定的根分区相关的文件名。在代码清单7-11中,默认启动的映像是Linux 2.6.9内核,与之相匹配的ramdisk映像是initrd-2.6.9.img。注意,GRUB的语法是将内核命令行参数与内核文件位置放在同一行上。
7.5.3 其他引导装入程序
很多其他的引导装入程序也用在专用的环境中。例如,Redboot是另一个用于Intel和Xscale平台上的开源引导装入程序,它用于采用Intel IXP和PXA系列处理器的评估板中;Micromonitor用在诸如Cogent和其他一些厂商的开发板中;YAMON一般用于MIPs平台中 ;LinuxBIOS主要用在X86环境中。总之,当你考虑选择一个启动代码时,应该首先考虑如下一些重要的因素:
它支持我选择的处理器吗?
它是否已经移植到了与我使用的开发板相似的板子上?
它支持我所需要的特性吗?
它支持我计划使用的硬件设备吗?
我是否能够获得社区里的很多用户的支持?