bootloader(例如grub,lilo ......)如何找到内核映像?

时间:2013-09-18 13:18:39

标签: linux kernel bootloader

例如,如果使用grub引导系统,可能会有诸如

之类的行
root (hd0,6)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
initrd /boot/initrd-2.6.11-1.1369_FC4.img 
在menu.lst中

我的问题是:

在将内核映像加载到内存之前,我认为没有可用于在磁盘中定位内核映像的文件系统信息(如文件系统类型,超级块)。

那么bootloader如何知道磁盘中图像的CHS?

我猜引导加载程序可以根据“root(hd0,6)”找到超级块;如果是这样,它必须盲目地检测所有可能的文件系统并找到匹配的文件系统。这太复杂了吗?

2 个答案:

答案 0 :(得分:2)

我会像Lilo一样给你一个答案:

安装新程序后必须运行/ sbin / lilo的原因 内核是LILO引导程序无法理解它的文件系统 只知道磁盘的低级块结构。该 / sbin / lilo程序确实理解文件系统,并翻译 内核的路径(即" /boot/vmlinuz-2.6.3")成为逻辑块地址 即3-4-123)以便LILO引导程序可以找到内核映像 加载。实际上,这是一个很大的黑客。

来源: http://courses.cs.washington.edu/courses/cse451/02wi/section/bootloaders.txt

答案 1 :(得分:0)

GRUB的设置过程包括

的生成
  • 第2阶段文件的完整物理地址列表
  • 编码的驱动器号(与BIOS调用一起使用)
  • 编码的分区号(这两个表单的值在您的示例中表示为(hd0,6)

阶段1和阶段2的引导程序可以一起使用它将完整阶段2加载到内存中。从那时起,第2阶段可以检测FS类型,激活相应的只读FS驱动程序,读取运行时配置(grub.cfgmenu.lst)并继续阅读kernel,{{1使用FS驱动程序等。

注意,这主要与LILO不同,后者在加载程序安装期间硬编码内核和initrd扇区列表;在启动时,加载程序只知道扇区列表而不知道FS结构。