我一直很好奇GRUB 2是如何工作的。在阅读它的源代码时,我发现有一些#include指令,其中包含了看似不存在的"grub/machine/...",例如在grub-core/boot/i386/pc/boot.S引导程序文件中。
看起来,它提供了一些特定于体系结构的宏,我当前的猜测是在为特定体系结构编译时,它是通过对include/grub中的文件和宏进行混合创建而成的(例如,
我很乐意得到一些关于幕后真正发生的事情的解释,因为我自己正在尝试学习内核开发。
#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),而且在某些情况下完全不同,这从我的角度来看似乎是违反直觉的。我很乐意得到一些关于幕后真正发生的事情的解释,因为我自己正在尝试学习内核开发。
grub/machine/boot.h
只在特定架构的文件中使用。对于 arm 架构,它依赖于uboot.h
。而boot.h
则用于多个架构,而uboot.h
则用于其他架构。 - Leland Bgrub/machine/boot.h
只在特定架构的文件中使用。对于 ARM 架构,它依赖于uboot.h
。而boot.h
则用于多个架构,而uboot.h
则用于其他架构。 - yxre