代码之家  ›  专栏  ›  技术社区  ›  NotYourFox

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

  •  3
  • NotYourFox  · 技术社区  · 2 年前

    我一直想知道GRUB2是如何工作的。在阅读它的源代码时,我发现有一些#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 ,我可以通过查看引导中的宏引用来假设。S和i386/pc/boot.h)中的相应定义,但我对自己的假设非常不确定,因为我没有找到任何关于这方面的文档或文章。此外,我也不明白,如果我的假设至少在某种程度上是正确的,为什么 包括/食物 不仅彼此不相似(例如,有一些共同的文件,比如arm/拥有自己的boot.h),而且在某些情况下完全不同,这在我看来似乎违反直觉。

    我很高兴能得到一些关于这些窗帘后面到底发生了什么的解释,因为我正在努力学习内核开发。

    1 回复  |  直到 2 年前
        1
  •  1
  •   yxre    2 年前

    在/config.ac,有这行

          AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
    

    这一行创建了一个指向正确CPU体系结构的符号链接 ../../include/grub/i386/pc 在我跑步之后 ./autogen.sh && ./configure && make 在我的机器上。该目录内将是依赖于体系结构的boot.h文件。

    我发现在本地运行一些构建命令更容易理解像这样的repos。