編譯一個打印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文件,此時在重新加載模塊就會發現通過了。
參考文章:
