linux - Linux 头文件中的 asm 与 asm-generic —— 它们相同吗

标签 linux linux-kernel driver header-files kali-linux

在我的 Kali kernal 5.7.0 头文件的 linux 头文件文件夹中,包含目录/usr/src/linux-headers-5.7.0-kali1-common/include 中。在这个文件夹中,我的头文件包含在 asm-generic、linux、uapi、acpi、crypto 等子文件夹中。但是在头文件中,即在 linux/module.h 中,包含一个头文件引用,如

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

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

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

最佳答案

简短回答

它们不一样。

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

您可以从以下帖子中获取更多信息

换一种方式回答这个问题。

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

要构建内核模块,您需要内核 header 或编译的内核源代码。不过我不了解kali linux,所以我在这里只是提供一般性建议。

哪里可以获得它们

  • 某些发行版(例如 Ubuntu)已经预先构建了 linux header 。

    • 例如: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 module_prepare 编译内核,为驱动程序编译必要的 Module.symvers。与编译完整内核相比,它花费的时间要少得多。

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

或者另一个example

关于linux - Linux 头文件中的 asm 与 asm-generic —— 它们相同吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65591871/

相关文章:

c - 使物理地址区域中的虚拟地址连续如何提高性能?

c - 如何理解和修复为嵌入式系统编译 Linux 内核时出现的错误

windows-7 - Wiimote 的 Windows HID 设备驱动程序安装。我们可以改进它吗?

c++ - 创建驱动程序时发生错误。设备驱动程序未安装在任何设备上,请使用原始驱动程序(如果提供)

mongodb - 无法通过 mongo 的官方 node.js 驱动程序进行身份验证,只能通过 mongo shell 进行身份验证。 (MongoDB Cloud Manager 副本部署)

linux - 在 Shell 中显示未找到的命令以及正确的退出状态。这怎么能解决?

php - 使用 PHP、MySql 时出现重音字符问题

linux - 在 Linux 内核中的指定地址分配内存块

c - 如何拼接/dev/mem?

linux原始以太网套接字绑定(bind)到特定协议(protocol)