Linux
在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 kernel 5.4.31的以下目錄中尋找這些文件:
/include /include/uapi /arch/x86/include /arch/x86/include/uapi
我希望在上面的包含路徑中找到文件。但是我不太了解編譯後如何處理 linux 標頭檔的位置和方式,因為我在原始碼中找到了它們。
你會發現你的建構使用的標頭檔
/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/
儲存與正在執行的核心對應的生成的標頭檔(和一些其他文件);目的是使它們特別可用於外部模組建構。如果您正在建構一個新核心,您將在建構樹中找到生成的文件(在核心建構或樹內模組建構之後)。