剛看linux 設備驅動的時候,下載了書中附帶的驅動程序,一直想用gcc命令,而不用makefile編譯驅動,結果第一次用gcc編譯的時候就出席了問題,下面是問題:
開始我用這個命令:
$ gcc -O2 -DMODULE -D__KERNEL__ -c test.c
不行,好多什麼錯誤,應該沒有連接到內核的庫文件,之後我就用附帶的makefile,反正只要make一下,也出現了問題,下面是問題的所在:
make的是scull這個文件夾下面的程序,出錯的消息是:
[root@azuo scull]# make
make -C /lib/modules/2.6.15-1.2054_FC5/build M=/myfile/examples/scull LDDINC=/myfile/examples/scull/../include modules
make: *** /lib/modules/2.6.15-1.2054_FC5/build: 沒有那個文件或目錄。 停止。
make: *** [modules] 錯誤 2
我就到/lib/modules/2.6.15-1.2054_FC5這個路徑下去查看了有build這個文件但是顯示是鏈接出錯,我查看了build的屬性,它的鏈接目標是/usr/src/kernels/2.6.15-1.2054_FC5-i686,我再去/usr/src下查看,確實沒有/kernels/2.6.15-1.2054_FC5-i686,有的 是redhat這個文件夾,裡面有幾個文件夾,BUILD,RPMS,SPECS,SOURCES,SRPMS。而且裡面都是空的。
我是這麼處理的,直接下了一個2.6.20的內核版本,之後解壓到/usr/src下面就有一個文件夾叫linux2.6.20,直接進入,開始編譯內核,具體怎麼編譯參考我的一篇文章叫編譯內核的。
完成以後,再去 /lib/modules/2.6.15-1.2054_FC5/build 下面看就可以發現build文件不是一個錯誤的連接了,而是一個文件夾的連接,我估計應該是差不多了。
有了心理保障就直接再去scull文件夾下面去make一下,果然可以通過了,沒有什麼問題,可以看到make的經過裡面告訴說長生了scull.ko還有其他的東西,其實這個就是驅動的可執行文件了。
按照LDD3作者說的,insmod scull.ko
可以通過,但是沒有反應哦。並沒有出現那些要打印的語句,真的想不通,不行我又去看了一下LDD3,我的英文版本的,也就是電子文檔,在第一個驅動的介紹裡面就有,怎麼編譯,和怎麼查看結果,他裡面說了如果用的是文字控制端,就可以看見,如果用的是在xwindow下的控制斷就看不到,就要去/var/log/messages裡面看,我在兩個裡面都編譯和加載了模塊都可以看到了。呵呵成功了特地分享一下。
還有一個問題就是好像作者的makefile是可以通用的,呵呵,只要改一個叫obj之後的那個什麼點o的名字吧,我是這麼做的。
其實也不一定要升級和編譯內核,可以去下載相應的內核的rpm包,因為安裝系統的時候,沒有安裝內核開發的包。下載一個kernel-devel-2.6.15-1.2054_FC5.i686.rpm就可以了。
從網上下載:
http://download.fedora.redhat.com/pub/fedora/linux/core/5/i386/os/Fedora/RPMS/kernel-devel-2.6.15-1.2054_FC5.i686.rpm
在安裝光盤裡面也應該有。
不過這個我已經編譯了內核才曉得的,具體可以解決問題不我也不曉得。
呵呵,加油!!!