3

例如,如果使用 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的呢?

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

4

2 回答 2

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

于 2014-04-26T12:55:07.347 回答
0

GRUB 的设置过程包括生成

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

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

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

于 2016-10-30T20:43:04.543 回答