多重引导 1 引导信息总大小

ajx*_*jxs 2 x86 kernel grub osdev multiboot

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

\n\n

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

\n\n

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

\n\n
\n

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

\n
\n\n

实际上,这似乎总是在最低 1MB 内存中加载。\n到目前为止,在启动​​期间,我使用最低 1MB 的标识映射来初始化启动分页结构,以确保可以访问多重启动信息。找出这个结构的位置很简单,但我还没有找到任何关于找到准确尺寸的信息。(最好不要走遍整个结构)。

\n

ajx*_*jxs 5

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

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