1. 程式人生 > >打造自己的專屬linux(四):Linux核心編譯過程簡介

打造自己的專屬linux(四):Linux核心編譯過程簡介

linux在前不久剛釋出了最新的3.0核心,在linux的學習中,瞭解核心的編譯是一個必不可少的功課。前幾天,學習了linux核心的編譯流程,在此總結下,大家來一起學習。

以最新的3.0核心為例,我下載的是linux3.0.1 下載地址:http://www.kernel.org

前提條件:1.確定你的linux有裝Development Tools  ,Development Libraris,他們是實現編譯的前提工具,如果沒有請使用yum groupinstall安裝

                    2.下載核心原始碼檔案並拷貝進虛擬機器裡

核心編譯的原則:1.編譯時需要一個新版本,漏洞少一點
                                2.儘可能選擇和自己硬體對應的驅動模組,相容性好
                                3.伺服器一般不用過新的核心,因為它沒有發現一些bug,有可能不穩定

--------------------------------------------------------------------------------------------------------------------------

第一步:將您的核心檔案複製到/usr/src/目錄下,解壓縮核心原始碼檔案,以為的電腦為例

[[email protected] src]# ls
busybox-1.18.5          linux                   linux-3.0.1.tar.bz2
[[email protected] src]# tar -xf linux-3.0.1.tar.bz2           # 解壓縮過程比較長,耐心等待
[
[email protected]
src]# ls busybox-1.18.5 linux linux-3.0.1 # 這就是源待碼檔案目錄

第二步:進入原始碼目錄,拷貝/boot/config-2.6.18-164.el5 到原始碼目錄並改名為.config

[[email protected] src]# cd linux-3.0.1                      
[[email protected] linux-3.0.1]# cp /boot/config-2.6.18-164.el5 ./.config

## 這裡需要做一個說明:由於我們是初次編譯核心,而核心的選項多達上千條,所有我們以redhat官方提供的核心版本配置檔案為藍本,在它的基礎上配置,保證核心的穩定性,而redhat核心的配置檔案就是/boot/config-`uname-r`   uname-r指的是當前系統的版本號,我的是2.6.18-164.el5,編譯時,系統會將你的配置儲存在.config檔案中

第三步:輸入make menuconfig 進去編譯配置介面   (其實有很多中方式,這裡只介紹一種常用的)

[[email protected] linux-3.0.1]# make menuconfig


*號表示編譯進核心,  M表示編譯成模組,按空格鍵選擇 ,回車鍵進入選擇分支,我們已經使用了.config檔案,所以可以直接編譯,當然你可以選擇自己想要的功能。

作者:金步國,國內有名的linuxer,翻譯過很多linux書籍

選擇接受後按按下面的ESC,彈出的介面選yes儲存


第四步:使用make命令編譯核心  #!需要注意的是,這個過程相當漫長,大概需要幾十分鐘到一個多小時的時間,而且最好不要在終端內進行,任何斷開連線都會造成編譯失敗,建議這一步在虛擬機器控制檯內進行

[[email protected] linux-3.0.1]# make

第五步:編譯結束後,安裝模組

[[email protected] linux-3.0.1]# makemake modules_install 

第六步:安裝核心,這一步會將核心資訊寫入到你的grub裡,(可以手動編輯grub.conf檔案去掉)你可以用現有的虛擬機器體驗新版本核心(前提不出錯,核心出錯會在啟動時顯示kernel panic!核心恐慌,可能是選擇的模組沒有對應的依賴關係,只能重新編譯)

[[email protected] linux-3.0.1]# make install   

在完成編譯後,核心檔案會存放在/boot目錄下

[[email protected] boot]# ls
System.map                 initrd-2.6.18-164.el5.img  vmlinuz-2.6.18-164.el5
System.map-2.6.18-164.el5  initrd-2.6.28.10.img       vmlinuz-2.6.28.10