2

有没有一种快速可靠的方法来找出内存中 Multiboot 1 启动信息的总大小?

澄清一下:我不是在询问 EBX 寄存器中的值所指向的结构的大小,而是在询问内存中所有信息的总大小。

我目前正在开发兼容 x86 Multiboot 1 的内核。该标准不保证 GRUB 将放置此信息或其总大小。该标准规定:

“Multiboot 信息结构及其相关子结构可以由引导加载程序放置在内存中的任何位置(当然,为内核和引导模块保留的内存除外)。操作系统有责任避免覆盖此内存,直到它是用它完成的。”

实际上,这似乎总是在最低的 1MB 内存中加载。到目前为止,在启动​​期间,我使用标识映射为最低 1MB 初始化我的启动分页结构,以确保 Multiboot 信息是可访问的。找出这个结构的位置是微不足道的,但我还没有找到任何关于找到准确尺寸的信息。(理想情况下不走整个结构)。

4

1 回答 1

4

从那以后我开始意识到 Multiboot 信息结构指向的数据不能保证连续存储,并且不是 GRUB 加载到内存中的唯一数据。因此,如果不手动行走该结构,就没有可靠的方法来衡量该内存的总大小或位置。

鉴于此限制,似乎最好的做法是确保在实现分页之前将 Multiboot 结构所需的所有数据复制到已知位置。

于 2019-12-11T00:23:19.687 回答