開如學習LDD3這本書。學習
我是在Fedora18上學習的,但我安裝的這個版本,/usr/src/下面沒有相應的源代碼。測試
本身從KERNEL網站下載相應版本源碼(安裝驅動有問題)網站
因而從kernel的網上下載了一個3.6.10的kernel源碼,個人fedora18是這個版本(uname -r查看)。ui
下載解壓放在/usr/src/kernel/目錄下,開始學習.net
這裏須要修改Kernel源碼中Makefile中定義的版本,通常LINUX發行商都會本身定義一個EXTRAVERSION的標識,下載的源碼須要與使用的LINUX保存一致,否則,驅動在加載時提示加載不了,如我以前的提示(/var/log/messages的顯示):blog
version magic '3.6.10 SMP mod_unload 686 ' should be ' 3.6.10-4.fc18.8686 SMP mod_unload 686';ci
因此我在kernel中的Makefile修改爲以下:get
VERSION = 3源碼
PATCHLEVEL = 6io
SUBLEVEL = 10
EXTRAVERSION = -4.fc18.i686
改完後,你須要在kernel源目錄下,make一下(生成後,中途Ctrl+C就能夠了,否則會等好久),以生成相應的文件。
按照上面的步驟,我編譯完相應的驅動,也能正確的加載了,但我調用printk時,/var/log/messages中並無打印相應的信息,找了好久,都找不到緣由,問題出來在哪裏。
最後我想是否是下載的內核源碼與如今系統使用的一致的問題,因而從fedora下載舊的18版本的源碼,安裝上,測試,就能夠了,雖然仍舊不知問題出來哪裏。
下面是安裝發行商下載的rpm源碼包的過程:
1:下載源代碼RPM文件
能夠在相應的發行商的網站上下載,或使用yumdownloader source kernerl....(完整的包名,注意版本號)
2: 安裝rpm包
rpm -ivh kernel...(rpm文件),在安裝以前能夠執行yum-builddep kernerl...(rpm文件),檢查相關的依賴性(這一步也能夠後面作)
在安裝的過程當中,若是出現以下錯誤:
warning: user mockbuild does not exist – using root
warning: group mockbuild does not exist – using root
新建一個組和一個賬號就行了。
#groupadd mockbuild
#useradd mockbuild -g mockbuild
而後再從新安裝
3:將源碼轉成可用狀態:
進入SPECS目錄
cd ~/rpmbuild/SPECS
執行如下命令(若是沒有安裝rpmbuild,執行yum install rpm-build安裝)
rpmbuild -bp –target=$(uname -m) kernel.spec (target選項前是兩個-)
若是出現error: Failed build dependencies。。。的錯誤,執行
yum-builddep kernel.spec (kernel.spec是~/rpmbuild/SPECS目錄下的文件)
or
yum-builddep kernel...(rpm文件),以前一步說明的檢查相關的依賴性
成功能源代碼會在~/rpmbuild/BUILD目錄裏
以上內容及問題參考瞭如下文章:
http://blog.csdn.net/derryzhang/article/details/6003122
http://stackoverflow.com/questions/13227162/automatically-install-build-dependencies-prior-to-building-an-rpm-package
4:下載安裝的源代碼裏的Makefile裏的版本和本身使用的主次版本一致,但發行商通常會加一個EXTRAVERSION來標識,
因此須要在源碼的Makefile裏定義EXTRAVERSION與本身用的發行 的一致的(uname -r).