在我的Linux头文件文件夹中,我的Kali kernal 5.7.0头文件包含在include目录/usr/src/linux-headers-5.7.0-kali 1-common/include中。在这个文件夹中,我有一些头文件,包含在像asm-generic,linux,uapi,acpi,crypto等子文件夹中。但在头文件中,即在linux/module.h中包含一个头文件引用,如
#include <asm/module.h> // top of linux/module.h
但实际上我没有asm文件夹,当我安装它们时,它包含在我的头文件中。所以我想到的一个解决方案是。可能的解决方案:将引用从asm/* 更改为asm-generic/*,如从asm/module.h更改为linux/module.h中的asm-generic/module.h以及我可能使用的其他文件。我想知道asm和asm-generic是一样的吗?这意味着它们包含相同的文件和结构,或者有任何差异,我可以导致问题
如果我更正了include reference中的目录名,而不是如果我将include list of header files中的header子目录名从asm更改为asm-generic,那么这是否有意义,或者在编译模块时会遇到问题?如果我不这样做的头文件将丢失
2条答案
按热度按时间pkln4tw61#
简短回答
它们不一样。
内核开发者可以在ASM报头中包括ASM通用报头,而ASM报头是内核模块所需的报头。
你可以从下面的帖子中获得更多信息
换个Angular 来看待这个问题。
看起来你正在尝试创建一个内核模块。
要构建内核模块,您需要内核头文件或编译的内核源代码。但是我不知道kali linux,所以我只是在这里提供一般性的建议。
去哪里拿
/usr/src/linux-headers-$(uname -r)/include
中有它sudo apt-get install linux-headers-$(uname -r)
1.你自己造
1.检查你想要的发行版的linux内核代码。
1.使用
make menuconfig
设置内核配置(您可能会在这里遇到一段时间..可能需要多个包)1.用
make modules_prepare
编译内核,为驱动程序编译基本的Module.symvers。它比编译一个完整内核花费的时间要少得多。我假设您已经找到了一个内核模块构建示例。如果没有,可以参考官方的内核模块documentation。如果你花点时间读前两章会有很大帮助。
或另一个example
jyztefdp2#
我发现我的asm目录在
和/或
你也可以在那里找到(我希望)。