使用 grub chainloader 时,os boot 代码会加载到内存的什么位置?

问题描述 投票:0回答:1

问题描述

嗨。我想使用 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?

非常感谢。

x86 bootloader osdev grub grub2
1个回答
0
投票

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 用于将引导驱动器编号传递给它加载的引导扇区的约定相同。

© www.soinside.com 2019 - 2024. All rights reserved.