Drivers
insmod 無法插入模組 無效的模組格式
我正在嘗試為 mcp251xfd 建構和安裝一個 linux 核心驅動程序。建構似乎成功(我得到了 .ko 文件),但是當我呼叫 insmod 來安裝它時,我得到:
insmod: ERROR: could not insert module mcp251xfd.ko: Invalid module format
在Google搜尋中,似乎最常見的建議是為您嘗試建構的確切核心版本使用完全相同的原始碼。所以 uname -a 返回:
Linux fedora 5.11.3-300.fc34.x86_64 #1 SMP Thu Mar 4 19:03:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux.
於是我下載了 5.11.3 版本的核心原始碼,執行 make oldconfig,編輯 .config 文件以包含驅動程序,執行 make prepare,然後進入驅動程序原始碼目錄並呼叫:
make -C ~/linux-5.11.3 -M=`pwd` modules
這很成功,因為它生成了文件 mcp251xfd.ko。insmod 在此之後,我得到了錯誤。我呼叫 dmesg,它返回:
mcp251xfd: version magic '5.11.3 SMP mod_unload ' should be '5.11.3-300.fc34.x86_64 SMP mod_unload '
所以我不確定下一步該怎麼做。畢竟 5.11.3 不是正確的版本嗎?
我注意到在我的 .config 文件中,我看到“CONFIG_BUILD_SALT=“5.11.3-300.fc34.x86_64”。所以它看起來與我的系統版本號匹配。在“make modules”期間是否有一個額外的命令行選項指示利用“鹽”版本號?
解決方案是打開 Makefile(Linux 原始碼樹中的那個)並修改以下行:
EXTRAVERSION = -300.fc34.x86_64
uname -r
與已安裝作業系統的文本匹配。