Ubuntu下編譯3.0.4內核

原文出處:http://edsionte.com/techblog/archives/3289

 

Linux內核3.0版本發佈已有一段時間了,不知道這個版本號大躍進的內核是否好用。目前各個發行版的linux還仍未採用3.0的內核,因此可以自己動手編譯內核來感受一下!趁着這次編譯內核的機會可以再熟悉一下編譯內核的步驟。

 

1.下載並解壓內核到任意目錄

從源碼官網下載最新的內核源碼3.0.4,可以解壓至任意目錄,我放在主目錄下:

 

1~$ tar xjvf linux-3.0.4.tar.bz2

2.配置內核

對內核進行配置是爲了得到內核配置文件.config。通過對內核進行配置,可以使未來編譯成功的內核增加或減少對一些內核特性的支持。對內核進行配置有多種方法,有基於文本的配置方式也有基於圖形的用戶界面。下面採用使用比較廣泛的make menuconfig方式:

 

1~/linux-3.0.4$sudo apt-get install libncurses5-dev
2~/linux-3.0.4$sudo make menuconfig

由於該配置方式基於ncurses庫,所以在啓動配置界面前要先安裝ncurses庫。啓動配置界面前,必須進入源碼根目錄,配置界面啓動成功後如下圖:

我們這裏對內核按照默認的配置方式進行編譯,因此當配置菜單啓動後直接退出並保存即可。此時就在內核源碼根目錄下生成了.config文件。

3.編譯

編譯內核包含兩部分的工作,其一是編譯內核,即編譯配置選項中標記爲Y的那部分,這部分內核最終形成bzIamge鏡像文件;其二是編譯內核模塊,即編譯配置選項中標記爲M的那部分內核,這部分形成以.ko結尾的內核模塊目標文件。

上述兩部分編譯工作可以依次通過make bzImage和make modules完成,也可以通過一條make命令直接完成。編譯內核的整個過程比較漫長,因此可以對make加-j參數來提高編譯的效率。在make時使用該選項會爲編譯過程分配n個併發任務,這樣可以縮短編譯時間。n的取值爲cpu個數的二倍。

 

1~/linux-3.0.4$sudo make -j4

4.安裝

安裝過程分爲兩部分,首先對內核模塊進行安裝,這個過程會將剛剛編譯內核模塊時生成的內核模塊複製到/lib/modules/3.0.4/目錄下,其中3.0.4爲對應的內核版本。使用的命令如下:

 

1~/linux-3.0.4$sudo make modules_install

接着使用下述命令安裝編譯好的內核:

 

1~/linux-3.0.4$sudo make install

安裝內核的過程主要完成了以下的工作:

1.將編譯內核時生成的內核鏡像bzImage拷貝到/boot目錄下,並將這個鏡像命名爲vmlinuz-3.0.4。如果使用x86的cpu,則該鏡像位於arch/x86/boot/目錄下(處於正在編譯的內核源碼下)。

2.將~/linux-3.0.4/目錄下的System.map拷貝到/boot/目錄下,重新命名爲System.map-3.0.4。該文件中存放了內核的符號表。

3.將~/linux-3.0.4/目錄下的.config拷貝到/boot/目錄下,重新命名爲config-3.0.4。

5.創建initrd.img文件

initrd.img即爲初始化的ramdisk文件,它是一個鏡像文件,將一些最基本的驅動程序和命令工具打包到鏡像文件裏。該鏡像文件的作用是在系統還沒有掛載根分區前,系統需要執行一些操作,比如掛載scsi驅動,此時將initrd文件釋放到內存中,作爲一個虛擬的根分區,然後執行相關腳本,運行insmod命令加載需要的模塊。

具體的創建方法如下:

 

1~/linux-3.0.4$sudo mkinitramfs 3.0.4 -o /boot/initrd.img-3.0.4

6.更新grub

最後一步則是更新grub啓動菜單,使用下面的命令則可以自動更新啓動菜單:

 

1sudo update-grub2

這樣會將剛纔編譯好的內核放在啓動菜單的首位,如果需要修改啓動菜單中默認系統的啓動順序,則修改/boot/grub/grub.cfg文件中的set default=的值即可。

OK,內核編譯完畢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章