模組中的未知符號但是什麼符號?

模組中的未知符號但是什麼符號?

我按照文檔編譯了一個驅動程式。但是當我嘗試通過加載它們時

insmod onebox_wlan_nongpl.ko

,我收到一條錯誤訊息:

insmod:錯誤:無法插入模組 onebox_wlan_nongpl.ko:模組中的未知符號

我知道這是由於加載.ko文件的順序錯誤造成的,但它沒有告訴我它依賴於哪個模組。我想知道什麼符號是未知的,無法歸檔我應該首先加載的模組。

答案1

您可以使用 簡單地檢查 dmesg 中缺少的符號dmesg | tail。如果您想檢查符號是否確實在符號表中,請使用cat /proc/kallsyms | grep <function_name> 類似問題進行檢查: https://ubuntuforums.org/showthread.php?t=1360950

答案2

若要查看實際遺失了哪些符號,請使用 查看核心日誌dmesg。它會向您顯示確切的符號。如果您自己編寫了核心模組,並且它依賴於裝置映射框架之類的框架,則必須先載入依賴項。這是我遇到的一個例子:

我寫了一個裝置映射器,這取決於設備映射框架。插入時,會發生這種情況:

$ sudo insmod some-module.ko
insmod: ERROR: could not insert module some-module.ko: Unknown symbol in module

檢查內核日誌:

$ sudo dmesg
[     XX.XXXXXX] some-module.ko: Unknown symbol dm_per_bio_data (err -2)
[     XX.XXXXXX] some-module.ko: Unknown symbol dm_put_device (err -2)
...

檢查加載的模組:

$ lsmod | grep dm
<NOTHING>

插入裝置映射目標驅動程式:

$ sudo modprobe dm_mod
$ lsmod | grep dm
dm_mod            184320 0

現在插入原始模組,錯誤已解決。

相關內容