在linux内核中找不到一些“asm”、“生成”头文件的来源?

在linux内核中找不到一些“asm”、“生成”头文件的来源?

所以,我正在编写一个在内核空间中工作的模块。我的代码编译正确并且工作正常。

问题是有一些头文件,我在任何地方都找不到。这对我来说没有意义,当头文件不存在时,为什么一切都会正常。他们一定存在于某个地方。

这些是我在任何地方都找不到的一些头文件(还有更多,但对于我的问题来说,它们可能就足够了):

#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/存储与正在运行的内核相对应的生成的标头(以及一些其他文件);目的是让它们特别可用于外部模块构建。如果您正在构建新内核,您将在构建树中找到生成的文件(在内核构建或树内模块构建之后)。

相关内容