GRUB源代码中的grub/machine include目录是什么?

3
我一直很好奇GRUB 2是如何工作的。在阅读它的源代码时,我发现有一些#include指令,其中包含了看似不存在的"grub/machine/...",例如在grub-core/boot/i386/pc/boot.S引导程序文件中。
#include <grub/machine/boot.h>

看起来,它提供了一些特定于体系结构的宏,我当前的猜测是在为特定体系结构编译时,它是通过对include/grub中的文件和宏进行混合创建而成的(例如,#include <grub/machine/boot.h>可能直接从include/grub/i386/pc/boot.h复制而来,这可以通过在boot.S中查看宏引用和i386/pc/boot.h中相应定义推断出来),但是我对我的假设非常不确定,因为我未能找到任何关于此的文档或文章。此外,如果我的猜测至少在某种程度上是正确的,那么为什么include/grub中的一些目录不仅仅相互之间不相似(例如,其中一些目录像arm/拥有自己的boot.h),而且在某些情况下完全不同,这从我的角度来看似乎是违反直觉的。
我很乐意得到一些关于幕后真正发生的事情的解释,因为我自己正在尝试学习内核开发。
1个回答

1
在 ./configure.ac 文件中,有这一行代码。
      AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])

那行代码在我机器上运行./autogen.sh && ./configure && make之后,创建了一个指向正确CPU架构的符号链接../../include/grub/i386/pc。在该目录下将会有与架构相关的boot.h文件。

我发现通过本地运行一些构建命令,更容易理解这样的存储库。


但是对于不包含boot.h文件的文件夹,比如arm文件夹,是否仍然会从其他地方继承头文件呢? - NotYourFox
但是对于不包含boot.h文件的文件夹,比如arm文件夹,情况又如何呢?头文件是否仍然从其他地方继承? - NotYourFox
1
看起来 grub/machine/boot.h 只在特定架构的文件中使用。对于 arm 架构,它依赖于 uboot.h。而 boot.h 则用于多个架构,而 uboot.h 则用于其他架构。 - Leland B
1
看起来 grub/machine/boot.h 只在特定架构的文件中使用。对于 ARM 架构,它依赖于 uboot.h。而 boot.h 则用于多个架构,而 uboot.h 则用于其他架构。 - yxre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接