为什么GRUB2不直接将diskboot.img加载到地址0x8000?

时间:2014-01-24 18:04:42

标签: assembly boot grub

我正在研究GRUB2的源代码并尝试理解为什么boot.S中的代码首先将diskboot.img(core.img的第一个扇区)加载到地址0x70000,然后使用copy_buffer将其复制到0x8000并且跳到那里继续执行。为什么不将图像直接加载到0x8000?

对#define GRUB_BOOT_MACHINE_BUFFER_SEG 0x7000有评论:“磁盘缓冲区必须长32K,不能跨越64K边界。”但第一个扇区只占用512个字节。

1 个答案:

答案 0 :(得分:1)

好的,让我们将此作为答案。我查看了代码和git历史,这是史前的。他们(重新)在多个地方使用相同的加载代码,并使用多个加载代码(取决于环境 - 软盘,光盘,LS-120,CD等)加载到同一个地方(即{{ 1}})。

  • 在多个地方重复使用相同的代码可以降低维护负担。
  • 某些特定于机器或介质的加载例程无法“加载”512字节;它们加载更多(最多32 KiB;例如CD代码总是加载2048字节的倍数),然后调用者只需复制它需要多少 - 也可以选择偏移量。

如果你需要了解更多,我建议联系GRUB_BOOT_MACHINE_BUFFER_SEG作为在这些领域做最多工作的人,并直接问他;这就是我们可以从代码中“神圣”的所有内容,而无需向作者询问意图。

相关问题