個人用的Linux版本為:Debian GNU/Linux,內核版本為:2.6.20-1-686.
第一步,下載Linux內核的源代碼,即構建LDD3(Linux Device Drivers 3rd)上面所說的內核樹。
如過安裝的Linux系統中已經自帶了源代碼的話,應該在/usr/src目錄下。如果該目錄為空的話,則需要自己手動下載源代碼。下載代碼的方法和鏈接很多,也可以在CU上通過http://download.chinaunix.net/search/?key=&q=kernel&frmid=53去下載。不過,下載的內核版本最好和所運行的Linux系統的內核版本一致。當然,也可以比Linux系統內核的版本低,但高的話應該不行(個人尚未實踐)。
Debian下可以很方便的通過Debian源下載:
首先查找一下可下載的內核源代碼:
# apt-cache search linux-source
其中顯示的有:linux-source-2.6.20,沒有和我的內核版本完全匹配,不過也沒關系,直接下載就可以了:
# apt-get install linux-source-2.6.20
下載完成后,安裝在/usr/src下,文件名為:linux-source-2.6.20.tar.bz2,是一個壓縮包,解壓縮既可以得到整個內核的源代碼:
# tar jxvf linux-source-2.6.20.tar.bz2
解壓后生成一個新的目錄/usr/src/linux——source-2.6.20,所有的源代碼都在該目錄下。
注:該目錄會因內核版本的不同而不同,各位動手實踐的朋友只需知道自己的源代碼所在的具體位置即可。
第二步:配置及編譯內核。
進入/usr/src/linux——source-2.6.20目錄下,可以看到Makefile文件,它包含了整個內核樹編譯信息。該文件最上面四行是關于內核版本的信息。對于整個Makefile可以不用做修改,采用默認的就可以了。
一般情況下,需要先用命令諸如"make menuconfig", "make xconfig"或者"make oldcofig"對內核進行配置,這幾個都是對內核進行配置的命令,只是它們運行的環境不一樣,執行一下這幾個命令中的任何一個即可對內核進行配置:
make menuconfig是基于界面的內核配置方法,make xconfig應該是基于QT庫的,還有make gcofig也是基于圖形的配置方法,應該是需要GTK的環境,make oldcofig就是對內核樹原有的.config文件進行配置一下即可。
其實內核的配置部分,主要是保證內核啟動模塊可動態加載的配置,默認配置里面應該已經包含了這樣的內容,因此,我用的是make oldconfig.
在內核源碼的目錄下執行:
# make
# make bzImage
其中,第一個make也可以不執行,直接make bzImage。這個過程可能要持續一個小時左右,因此是對整個內核重新編譯了。執行結束后,可以看到在當前目錄下生成了一個新的文件: vmlinux, 其屬性為-rwxr-xr-x。
然后執行:
# make modules
# make modules_install
對內核的所有模塊進行編譯和安裝。
執行結束之后,會在/lib/modules下生成新的目錄/lib/modules/2.6.20/。 在隨后的編譯模塊文件時,要用到這個路徑下的build目錄。至此,內核編譯完成。可以重啟一下系統。
第三步:編寫模塊文件及Makefile
以LDD3上的hello.c為例:
|
Makefile文件的內容為:
|
其中,hello.c和Makefile文件應該位于同一個目錄下,可以放在/home下,我的兩個文件都位于/home/david/.
第四步:編譯和裝載模塊
在文件所處的目錄下,執行:
debian:/home/david # make
然后查看該目錄下有哪些文件生成:
|