編譯Linux核心是核心開發的基本功,如果我們通過直接修改Linux核心代碼來增加核心功能,那麼修改後的核心代碼必須要重新編譯產生新的映像檔案,然後載入該映像檔案便可以啟用新核心。
不同的Linux發行版本,其核心編譯過程會有所不同。這裡所用平台是Fedora 10,Linux kernel為2.6.27.5,待編譯的Linux kernel為2.6.27.39。此處僅僅是編譯一個乾淨的核心並且載入成功,而並不對核心進行修改。
第一步:下載核心
一般情況下,待編譯的核心(即新核心)的版本不能低於正在啟動並執行版本,如果兩者版本差距較大,則可能需要更新如gcc,binutils之類的編譯工具。這裡只採用Linux發行版所對應的核心版本進行編譯,這樣所有核心編譯工具都是現成的,無須更新。
1)、先查看當前環境下的核心版本號碼
#uname –r
2.6.27.5-117.fc10.i686
2)、下載相應的核心壓縮包
網址:http://www.kernel.org/pub/linux/kernel/v2.6/(筆者選擇的是2.6.27.39.tar.bz2)。將核心壓縮包複製到Linux下某個目錄,如/usr/src。
筆者是在XP系統中先下載壓縮包,然後將其複製到Linux的目錄中。這樣操作不能直接將壓縮包複製到Linux的/usr/src目錄下,只能先將其複製到Linux案頭,然後用cp命令將壓縮包複製到Linux的/usr/src目錄下。
3)、解壓縮包產生代碼樹/usr/src/linux-2.6.27.39
指令如下:
#cd /usr/src
#tar jxvf linux-2.6.27.39.tar.bz2
#cd linux-2.6.27.39
說明:如果選擇的壓縮包尾碼是.gz,上3)中的第二條指令中的jxvf應換成zxvf。
第二步:產生核心設定檔.config
Linux核心代碼非常龐大,使用於許多體繫結構,包含大量驅動程式。在產生核心的時候要根據實際情況進行配置,所有的配置將儲存在核心代碼樹頂級目錄下的一個名為.config的設定檔中。
1)、複製設定檔範本
設定檔可以從頭開始產生,一般沒這必要,因為當前正在啟動並執行核心已經有對應的設定檔,在/boot目錄下。將其做模板複製到/usr/src/linux-2.6.27.39目錄下:
#make mrproper
#cp /boot/config-‘uname –r’ ./.config
命令“make mrproper”用來保證核心樹是乾淨的,如果核心樹已經編譯過,該命令有效;如果核心樹第一次編譯,則可以省略該命令。命令“cp /boot/config-‘uname –r’ ./.config”中“‘uname –r’”代表2.6.27.5-117.fc10.i686,“./.config”中前一點表示將拷貝放置在開頭進入的預設目錄(即/usr/src/linux-2.6.27.39)中,並將其命名為.config的隱含檔案。
2)、產生新核心的.config設定檔
拷貝後雖然有了模板,但是.config檔案的配置並不一定囊括了新核心的所有編譯選項,可以使用下面的命令:
#make oldconfig或#make silentoldconfig
命令“#make oldconfig”讀取.config檔案並根據新核心版本更新它。具體是:該命令輸出新核心所有的配置值,如果配置項在.config中有設定,則輸出設定值;如果是新項,程式會暫停要使用者輸入設定值。命令“#make silentoldconfig”和命令“#make oldconfig”功能相似,但他不輸出資訊,除非是新選項要求使用者輸入的時候。
到此,產生的.config檔案就可以使用了。
第三步:編譯和安裝新的核心
1)、可以定義自己的核心版本號碼
在編譯核心之前,使用者可以定義自己的核心版本號碼,這樣做目的是為了便於識別。在核心代碼樹的根目錄下有檔案Makefile,它的前4行的最後一行“EXTRAVERSION=.39”中的值.39可以修改。(當然可以對Makefile檔案不做任何處理)
2)、編譯新核心
執行下面三個命令:
#make all
#make modules_install
#make install
命令“make all”用於產生期望的核心映像及模組;“make modules_install”將安裝模組到“預設目錄/lib/module/<核心版本號碼>”下面;“make install”最終將核心映像等幾個檔案複製到“/boot”目錄,並修改引導程式的配置以啟用該新核心。這三個命令一定要執行成功。
說明:對於雙核處理器,命令“make all”可改用“make -j2 all”以加快速度。
3)、可以修改引導程式GRUB
如果上述三個命令均執行成功,使用者可以觀察到引導程式grub的設定檔/boot/grub/menu.lst並將其進行合理修改配置。開啟menu.lst的方法之一是:
#gedit /boot/grub/menu.lst
說明:1、命令“gedit /boot/grub/menu.lst”只是用gedit開啟設定檔menu.lst,其他還可以用eamcs,vim,cat,tail等。
2、為了以後能直接操作菜單,可把menu.lst檔案中hiddenmenu那一行注釋掉(前加#)或刪除,並且可以根據需要設定其中的default和timeout的值,分別表示預設啟動項及等待時間。
4)、重啟查看
用命令#reboot重啟系統就可以看到GRUB菜單已經包含了新編譯的核心。