把編譯好的ko文件加載模塊時出錯:Error: could not insert module hello_world.ko: Invalid module format


編譯一個打印helloworld信息驅動模塊的時候遇到問題:

insmod: ERROR: could not insert module hello_world.ko: Invalid module format

問題應該是編譯模塊時選擇的Linux頭文件目錄與當前運行的系統版本不匹配,使用命令:uname -r查看當前運行的內核版本,然后選擇正確的Linux頭文件路徑,也可以下載和機器內核對應的Linux源碼,這樣指定Linux頭文件目錄到指定的源碼目錄就行了。

查詢到內核版本信息后,在makefile文件里把路徑修改一下就可以make編譯再加載內核模塊了:

另外模塊的printk打印的信息不能直接顯示在終端上,可以使用 dmesg 查看自開機以來的信息就可以看到printk輸出的信息了,使用dmesg | tail可以查看最后的幾個消息。使用rmmod 可以移除安裝了的模塊。

或者可以用dmesg 命令查看一下可能出錯的信息:

可以看出先前的ko文件的模塊版本信息和當前的內核版本信息已經不匹配了,可以重新編譯下需要加載的ko文件:make helloworld.mk得到新的ko文件,此時在重新加載模塊就會發現通過了。

參考文章:

http://stackoverflow.com/questions/21244481/error-using-insmod-could-not-insert-module-hello-world-ko-invalid-module-forma


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM