bootloader(如grub,lilo …)如何find内核映像?

例如,如果使用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。

我的问题是:

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

那么bootloader如何知道磁盘镜像的CHS呢?

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

我会给你一个答案使用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

GRUB的设置过程包括生成

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

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

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