編譯一個列印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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/181294.html
標籤:其他
上一篇:ceph客戶端安裝配置訪問rbd
下一篇:如何安裝pkg-config
