Aks*_*ngh 1 linux c source x86 linux-headers
所以,我正在编写一个在内核空间中工作的模块。我的代码编译正确并且工作正常。
问题是有一些头文件,我在任何地方都找不到。这对我来说没有意义,为什么头文件不存在时一切正常。他们一定在某个地方。
这些是我在任何地方都找不到的一些头文件(还有更多,但对于我的问题,它们可能就足够了):
#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 */
Run Code Online (Sandbox Code Playgroud)
尽管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>
Run Code Online (Sandbox Code Playgroud)
我正在linux 内核 5.4.31的以下目录中查找这些文件:
/include
/include/uapi
/arch/x86/include
/arch/x86/include/uapi
Run Code Online (Sandbox Code Playgroud)
我希望可以在上述包含路径中找到这些文件。但是我对编译后处理 linux 头文件的位置和方式知之甚少,因为我在源代码中找到了它们。
您将在 中找到构建使用的头文件/lib/modules/$(uname -r)/build/,例如参见
find /lib/modules/$(uname -r)/build/ -name timeconst.h
Run Code Online (Sandbox Code Playgroud)
所有这些文件都是在构建过程中以各种方式生成的;timeconst.h由kernel/time/timeconst.bc.
/lib/modules/$(uname -r)/build/存储与正在运行的内核对应的生成的头文件(和一些其他文件);目的是使它们特别适用于外部模块构建。如果您正在构建一个新内核,您将在构建树中找到生成的文件(在内核构建之后,或在树内模块构建之后)。