嗨。我想使用 grub chainloader 加载我的 minios(我自己开发的操作系统,不是 linux 或 windows)。 在使用 grub chainloader 之前,minios 启动过程是
BIOS->MBR->os boot(stored in sector 0 of the primary partition)->loader.bin->os kernel.elf
。我觉得使用grub chainloader后,启动过程应该是BIOS->grub->os boot->loader.bin->os kernel.elf
。我知道执行后
set root=(hd0,1)
chainloader +1
boot
os boot(存放在主分区的0扇区)会被载入内存并开始执行。不知道os boot会加载到内存的什么地方?
请告诉我 grub chainloader 将在内存中的哪个位置加载 os 引导。所以我可以修改我的os启动代码(汇编代码)中的伪指令
org 0x????
来保证os启动的正常执行。
我也想知道有没有办法让grub把主分区的起始扇区信息传递给os boot?
非常感谢。
GRUB 将链式加载您请求的分区的Volume Boot Record (VBR)。 VBR 将由 GRUB 放入物理地址 0x7c00 的内存中。在将控制转移到 VBR 之前,它会将 DS:SI 设置为指向您请求启动的分区的 16 字节 Partition Table Entry。使用 DS:SI 处的分区表条目,您可以确定分区中的起始扇区和扇区数。
传统 BIOS 的链式加载已经进行了几十年。 DS:SI 指向分区表条目的约定不是 GRUB 独有的,但也是 DOS/Windows 主引导记录 (MBR) 会做的,以链式加载到 中指定的活动分区的 VBR MBR的分区表.
传统 BIOS 链式加载还将确保引导驱动器编号传递到寄存器 DL 中的 VBR。这与 BIOS 用于将引导驱动器编号传递给它加载的引导扇区的约定相同。