1

我一直在查看 LILO bootsect.s 和 GRUB stage1.s。

LILO 从特定的硬编码扇区加载东西(或东西);它不使用一些可以在安装时修补的保留字节。我想知道如果您在分区上而不是单独在驱动器上,这将如何工作?LILO 如何告诉它的 bootsec.s 它在磁盘上的位置,从而适当地调整它需要加载的文件的位置?

LILO 没有用于 BPB 的空间,因此它在很大程度上是一个 ext 引导加载程序。ext 在引导扇区之后仅保留了另一个 512。LILO 的第 2 阶段真的可以放在这么小的空间里吗?还是将其放置在保留块上?

另一方面,GRUB 确实为 stage2 所在的位置保留了一个 dword,我认为可以在安装时对其进行修补。但它没有说明它的大小。看着它,它似乎只是读取了一个扇区(mov ax, 0x0201)然后跳转到它。查看 stage2 目录,我认为它不能仅适用于单个扇区。

LILO 和 GRUB 配置文件都与它们所在的文件系统无关。他们如何继续引导过程?我的意思是它包含文件的路径,但我认为这没有多大帮助。他们试图找出答案吗?怎么会这样?如果已经存在操作系统,是否与当前操作系统喜欢其文件系统设置和引导加载程序文件的方式有任何冲突?鉴于他们的 stage1 几乎是文件系统愚蠢的。

当 LILO 和 GRUB 设置分区引导扇区(预分区磁盘)时,它是否会读取 MBR 上的分区表并推断其余部分在磁盘上的位置,因此“固定寻址”可以工作,因为它会修补东西,还是它实际上将它的东西加载到固定硬盘扇区上?我回到我的冲突问题。

我正在尝试编写引导加载程序,但我觉得仅读取静态磁盘地址的东西还不够好,因为它可能与文件系统结构发生冲突,而且我不知道如何“知道”我在磁盘上的位置,因为我不知道我是否可以相信 DS:SI 指向一个真正的分区表(如果我在 LBA 0 上怎么办?)并且读取 MBR 分区表并在我的 stage1 中修补一些 dword 并不是很好大部头书。所以我正在从 LILO 和 GRUB 中寻找一些灵感。不是用 NASM 编写并没有真正的帮助。:(

4

1 回答 1

1

显然有所谓的“DOS 兼容区域”。在这里洞察

基本上,CHS 0:0:2 - 0:0:63 是“免费的”;分区从 1:0:1 开始。

于 2012-12-01T18:00:13.427 回答