linux headers 中的 asm vs asm-generic——它们相同吗

asm vs asm-generic in linux headers -- are they same

在我的 linux header 文件夹中,我的 Kali 内核 5.7.0 headers 包含在包含目录 /usr/src/linux-headers-5.7.0-kali1-common/include 中。在此文件夹中,我有 sub-folders 中包含的 header 文件,如 asm-generic、linux、uapi、acpi、crypto 等。但在 header 文件中,即在 linux/module.h 中有一个 header 文件引用,如

    #include <asm/module.h>  // top of linux/module.h

但实际上我的 header 文件中没有安装 asm 文件夹。 所以想到的一种解决方案是。可能的解决方案:将引用从 asm/* 更改为 asm-generic/*,如从 asm/module.h 到 asm-generic/module.h 在 linux/module.h 和我可能的其他文件中利用。我想知道 asm 和 asm-generic 是否相同?意思是它们包含相同的文件和结构,或者有什么不同我会导致问题

如果我更正包含引用中的目录名称是否有意义,或者如果我更改 header 的包含列表中的子目录名称,编译模块时会遇到问题 header 文件从 asm 到 asm-generic?如果我不这样做,header 文件将会丢失

简答

它们不一样。

内核开发人员可能会在 asm header 中包含 asm-generic header,而 asm header 是内核模块所需的 header。

您可以通过关注post

获得更多信息

换个角度看这个问题。

看来您正在尝试制作内核模块。

要构建内核模块,您需要 kernel-headers 或已编译的内核源代码。但是我不知道kali linux,所以我只是在这里提供一般性的建议。

从哪里得到它们

  • 一些发行版,如 Ubuntu,已经预构建 linux-headers。

    • 例如:Ubuntu /usr/src/linux-headers-$(uname -r)/include
  • 通过sudo apt-get install linux-headers-$(uname -r)

    下载
    • 看来 kali linux 2.0 可能需要更多操作。发现 this post 可能有帮助。
  • 自己构建

    1. 检查 linux 所需发行版的内核代码。
    2. 使用 make menuconfig 设置内核配置(您可能会在这里迷迷糊糊.. 可能需要很多包)
    3. 使用 make modules_prepare 编译内核以编译必要的 Module.symvers 驱动程序。它比编译一个完整的内核花费的时间要少得多。

我想您已经找到了内核模块构建示例。如果没有,你可以参考官方内核模块documentation。如果您花点时间阅读前两章,将会有很大帮助。

或另一个example