固定扇区加载bootloader(LILO,GRUB,自定义)

时间:2012-12-01 10:38:47

标签: assembly bootloader osdev

我一直在关注LILO bootsect.s和GRUB stage1.s。

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

LILO没有空间用于BPB,因此它在很大程度上是一个ext引导加载程序。 ext只在bootsector之后有另外512个保留。 LILO的第二阶段真的能适应这么小的空间吗?还是将它放在保留的块上?

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

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

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

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

1 个答案:

答案 0 :(得分:1)

显然有所谓的“DOS兼容性区域”。洞察力here

基本上,CHS 0:0:2 - 0:0:63是'空闲';分区从1:0:1开始。