在Ubuntu下寫Linux Kernel驅動程式的心的

OS                   :  Ubuntu 10.04
Linux Kernel :  2.6.32-28-generic

        最近在Ubuntu開始寫Linux Device Driver,首先遇到的一個問題就是當我寫好了一個簡單
的Driver,也下載了 2.6.32-28的kernel並且將我寫得Driver丟進去編譯,一個簡單的Driver當然
編譯過程都沒有任何的錯誤也編出了ko檔,但是呢?當我用insmod的指令去掛載我的Driver這
時出現了一個錯誤訊息:

insmod: error inserting 'test.ko': -1 Invalid module format

        我一開始也不太懂為什麼這樣的問題是怎樣,後來我就想了一下會不會是我的OS的Kernel
根本不認識我的驅動程式,所以我就開始重新編譯OS的Kernel,並且將我的Driver也加上去(
我是寫一個字元裝置"char device",所以我的Driver放在kernel/drivers/char/底下,記得要去編輯
kernel/drivers/char/底下Kconfig跟Makefile,還有在做make menuconfig的時候自己Driver的選項
必須設在M,如果你設在Y那Driver可是不能用rmmod去將Driver給卸載掉與不能用insmod重新
安裝新的driver上去,這部份我有空在寫文章做個簡單的教學)。

        所以我在重新編譯之後,也將kernel換上去,進入:

/lib/modules/2.6.32-33-core3/kernel/drivers/char/

        應該可以看見你所寫得Driver了,記得用insmod去安裝上去,然後在用dmesg看看kernel有
沒有吐出什麼訊息。還有記得用cat /proc/device 跟lsmod來看看你的Driver有沒有安裝成功。


P.S.  至於如何重新編譯Ubuntu的kernel記得看我寫得Ubuntu 10.04 重新編譯Kernel
張貼留言

這個網誌中的熱門文章

Unions 在C語言的簡單介紹

解釋scope.$apply用來做什麼? -- AngularJS

JavaScript的Timer用法