Linux

在linux核心中找不到一些“asm”、“生成”標頭檔的來源?

  • May 9, 2020

所以,我正在編寫一個在核心空間工作的模組。我的程式碼可以正確編譯並正常工作。

問題是有一些標頭檔,我在任何地方都找不到。這對我來說沒有意義,當標頭檔不存在時,怎麼一切都正常。它們必須存在於某個地方。

這些是我在任何地方都找不到的一些標頭檔(還有更多,但對於我的問題,它們可能就足夠了):

#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.hkernel/time/timeconst.bc.

/lib/modules/$(uname -r)/build/儲存與正在執行的核心對應的生成的標頭檔(和一些其他文件);目的是使它們特別可用於外部模組建構。如果您正在建構一個新核心,您將在建構樹中找到生成的文件(在核心建構或樹內模組建構之後)。

引用自:https://unix.stackexchange.com/questions/585479