剛看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
在安裝光碟片裡面也應該有。
不過這個我已經編譯了核心才曉得的,具體可以解決問題不我也不曉得。
呵呵,加油!!!