所以,我正在编写一个在内核空间中工作的模块。我的代码编译正确并且工作正常。
问题是有一些头文件,我在任何地方都找不到。这对我来说没有意义,当头文件不存在时,为什么一切都会正常。他们一定存在于某个地方。
这些是我在任何地方都找不到的一些头文件(还有更多,但对于我的问题来说,它们可能就足够了):
#include <asm/errno.h>
#include <asm/socket.h> /* /include/linux/socket.h */
#include <stdarg.h> /* /include/linux/kernel.h */
#include <asm/types.h>
#include <asm/mmiowb.h> /* /include/linux/spinlock.h */
#include <asm/param.h> /* /include/linux/jiffies.h */
尽管可以在 以外的体系结构上找到一些头文件x86
,但我认为这不能解决问题。
我不知道在哪里寻找这些文件:
#include <generated/timeconst.h> /* /include/linux/jiffies.h */
#include <generated/bounds.h>
#include <generated/autoconf.h> /* /include/linux/kconfig.h */
#include <generated/asm-offsets.h>
我正在以下目录中查找这些文件Linux内核5.4.31:
/include
/include/uapi
/arch/x86/include
/arch/x86/include/uapi
我希望在上面的包含路径中找到这些文件。但我不太了解编译后 linux 头文件在哪里以及如何处理,因为我是在源代码中找到它们的。
答案1
您将找到您的构建所使用的头文件/lib/modules/$(uname -r)/build/
,请参阅例如
find /lib/modules/$(uname -r)/build/ -name timeconst.h
所有这些文件都是在构建过程中以各种方式生成的;timeconst.h
是由 建造的kernel/time/timeconst.bc
。
/lib/modules/$(uname -r)/build/
存储与正在运行的内核相对应的生成的标头(以及一些其他文件);目的是让它们特别可用于外部模块构建。如果您正在构建新内核,您将在构建树中找到生成的文件(在内核构建或树内模块构建之后)。