一、module.symvers文件格式
module.symvers文件是用於內核模塊構建的一種中間文件,包含了內核符號表中的所有符號,在編譯內核模塊時會與當前內核的符號表進行比較,以便找出需要的符號。module.symvers文件一般在內核源代碼樹下的 Module.symvers 文件中,其格式如下:
EXPORT_SYMBOL_GPL(sym)
其中 EXPORT_SYMBOL_GPL 是內核模塊中定義符號的宏,sym 是符號的名稱。例如:EXPORT_SYMBOL_GPL(mycustom_function)。
二、module.symvers文件為0kb原因分析
在構建內核模塊時,可能會遇到 module.symvers 文件為0kb的情況。這種情況發生的原因往往是因為構建內核時未開啟 CONFIG_MODVERSIONS 選項,導致無法生成符號版本信息。此時可按以下步驟進行修復:
1、在內核源代碼樹下執行 make oldconfig 命令,以便重新配置內核。
make oldconfig
2、進入內核配置菜單,開啟 CONFIG_MODVERSIONS 選項。
make menuconfig
3、重新編譯內核。
make -j4 make modules_install make install
三、module.symvers的作用
module.symvers 文件的作用主要有以下兩個方面:
1、編譯內核模塊時,module.symvers 文件用於與當前內核的符號表進行比較,以便找出需要的符號。
2、module.symvers 文件還被用於內核簽名, 每個內核模塊都必須被簽名,以確保內核模塊來自受信任的源頭。
四、如何生成module.symvers文件
1、在內核源代碼樹下執行 make prepare 命令。
make prepare
2、在內核源代碼樹下執行 make script symvers 命令,以便生成 module.symvers 文件。
make scripts make symvers
3、請注意,只有開啟了 CONFIG_MODVERSIONS 選項,才能成功生成 module.symvers 文件。
五、使用module.symvers文件
在內核模塊編寫過程中,module.symvers 文件用於指定需要與內核符號表進行比較的符號。具體步驟如下:
1、在內核模塊代碼中使用 EXPORT_SYMBOL_GPL 宏,聲明需要導出的符號。
EXPORT_SYMBOL_GPL(mycustom_function);
2、編譯內核模塊時,使用 -C 選項指定當前內核源碼路徑。使用 -I 選項指定內核頭文件路徑。
make -C /path/to/kernel/source M=$PWD modules
3、編譯內核模塊時,使用 -I 選項指定當前內核的符號表路徑。
make -C /path/to/kernel/source M=$PWD modules KBUILD_EXTRA_SYMBOLS=/path/to/kernel/symbols/module.symvers
六、結論
module.symvers 文件作為內核模塊構建的一個關鍵中間文件,包含了內核符號表中的所有符號,在編譯內核模塊時起到了至關重要的作用。當出現 module.symvers 文件為0kb的情況時,需要檢查是否開啟了 CONFIG_MODVERSIONS 選項,並進行修復。在內核模塊編寫階段,使用 module.symvers 文件與內核符號表進行比較,以找出需要的符號,有助於提高內核的安全性和可維護性。
原創文章,作者:ICCH,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/145894.html