核心編譯(kernel)
最近更新日期:2001/08/17
前言
下載新核心
開始設定核心的內容
開始編譯
安裝編譯完成的核心及設定多重開機選項 lilo


前言
其實應該在安裝完 Linux 之後便開始編譯核心,因為每個人所需要的核心都並不相同!舉個例子來說,你安裝了一個很新的網路卡,但是你的核心並不支援這一種網路卡,那你只好下載比較新的核心來編譯,才能支援你的網路卡!另外,由於太大的核心對於整體的執行效能會比較慢,所以適當的核心對於你的 Linux 系統之執行效率也是有幫助的!因此,一般的玩家通常在安裝完了 Linux 之後,便開始進行核心的重新編譯工作!

study-area 也曾提到:Linux的靈魂所在﹐其實就是其穩定的核心設計。我們可以將之看成是一個架於程式和硬體之間的界面操作系統﹐離開來核心﹐什麼東西都用不了。而核心的編譯好壞﹐也會影響到系統的效能﹐甚至﹐一些系統功能(如 ip networking)﹐就必須要編進核心才行。

不過,由於核心的更新速度太快了,如果你一直執著於最新的核心編譯,那肯定會吃不消,所以通常我們的建議就是,除非你有新的需求,否則可以不用常常去更新核心的!



下載新核心

開始設定核心的內容
編譯核心有許多方法,這裡以視窗介面的方法來說明:
  1. 進入核心目錄 cd /usr/src/linux

  2.  
  3. 開始設定畫面make menuconfig

  4.  
  5. 進入選擇項目

  6. 進入選擇項目之後,你將會在視窗介面中看到很多的選項,請使用方向鍵、空白鍵與 enter 來進行選擇。以下開始你要慢慢的詳細挑選,如果有任何問題的話,請詳細的看一下每一個選項中的 Help 。另外,如果沒有需要的話,請盡量不要把核心邊的太大!否則效能是會降低的喔!此外,由於很多時候你不曉得需不需要選擇這個項目,那你可以將之編成模組(<M> 的項目),模組是在開機載入時有被載入才可以執行的咚咚!所以並不會使效能方面有太大的問題!
     


    這樣就編完了,請按下『exit』然後選擇 save 後,即可離開視窗畫面。
     

  7. 更改前一版的模組目錄

  8. 再來則是要開始讓系統編譯你剛剛設定的核心了,此時請注意,如果你使用的核心版本之前你已經有編過一次了,那樣的話,在 /lib/modules 這個目錄中應該會有前一版的模組,這時請到這個目錄下將該核心目錄更改名稱。不過我們這裡由於是第一次編譯核心,所以在 /ib/modules 裡面應該只有 2.2.12-20 這個目錄,因此這一步就不用作了。


開始編譯
這個時候要開始編譯我們的核心了,其實也是很簡單,直接執行以下幾個步驟即可:
 
[root@tsai linux]# make dep
[root@tsai linux]# make clean
[root@tsai linux]# make modules
這個步驟要花點時間的,所以按下 enter 後就可以去看電視了!
[root@tsai linux]# make modules_install
[root@tsai linux]# make bzImage
這個步驟是最久的一步,也請你去喝個茶吧!
這時才開始編譯核心。其實有兩種編譯核心的方法,
分別是 make bzImage 及 make zImage,有何不同?
在 bzImage 編譯的核心是經過壓縮的,由於我們目前編的核心
都蠻大的,所以需要 bzImage 這個指令,如果你選擇的核心很小,
就可以使用 make zImage 了(據說比較快一點)。
[root@tsai linux]# make bzlilo
最後一動啦,將核心安裝在硬碟之上。

在執行 make modules_install 後,會在你的 /lib/modules 形成一個專屬於這個核心的模組目錄,而在執行 make bzImage 成功之後,會在你的根目錄造成兩個重要的檔案,就是我們最重要的核心開機程式了,分別是:vmlinuzSystem.map 這兩個檔案。



安裝編譯完成的核心及設定多重開機選項 lilo
好了,編譯完就是要安裝啦!由於害怕剛剛編譯完的核心不能正常的開機,所以通常鳥哥都是手動來設定成多重開機的選單,好讓我們如果發生錯誤的設定,可以直接再次開機來進入 Linux 系統。
  1. 移動兩個主要的開機檔到 /boot 中:並加以更改名稱
  2. [root@tsai linux]# cd /
    [root@tsai /]# mv System.map /boot/System.map-2.2.18
    [root@tsai /]# mv vmlinuz /boot/vmlinux-2.2.18
    [root@tsai /]# cd /boot
    [root@tsai /boot]# rm System.map
    [root@tsai /boot]# ln -s System.map-2.2.18 System.map
    如此一來,則你的開機執行的 System.map 會找尋 2.2.18 這一版的資訊!
     
  3. 編輯你的 /etc/lilo.conf 多重開機設定檔

  4. 這裡就必須比較小心了,因為設定錯誤會讓你開不了機的!只要設定一個檔案就好了,那就是 /etc/lilo.conf 這個檔案。
    [root@tsai /boot]# vi /etc/lilo.conf
    進入 vi 的編輯畫面,原始的 lilo.conf 有點像這樣:
    ----
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    prompt
    timeout=50
    default=linux

    image=/boot/vmlinuz-2.2.12-20
            label=linux
            initrd=/boot/initrd-2.2.12-20.img
            read-only
            root=/dev/hda5

    other=/dev/hda1
            label=windows
    ----
    關於上述個相關的咚咚你可以到 設定lilo 去看,
    而經過修改之後可以變成像是這樣:
    ----
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    prompt
    timeout=50
    default=linux-2.2.18 <==預設以 2.2.18 開機

    image=/boot/vmlinuz-2.2.12-20
            label=linux-2.2.12-20
            initrd=/boot/initrd-2.2.12-20.img
            read-only
            root=/dev/hda5

    image=/boot/vmlinuz-2.2.18 <==這是新的核心喔!
            label=linux-2.2.18 
            read-only
            root=/dev/hda5

    other=/dev/hda1
            label=windows

    重要的地方在於 default=linux-2.2.18 這一行,以及 image=/boot/vmlinuz-2.2.18 兩行,需要指定正確才行!基本上這樣就設定成功了!
     
  5. 啟動 lilo

  6. 這個時候請打入:
    [root@tsai /boot]# lilo
    Added linux-2.2.12-20
    Added linux-2.2.18 *
    Added windows
    你會看到如上的說明,可以看到 linux-2.2.18 有打星號,這表示預設的開機檔是以 linux-2.2.18 的核心來開機的!
     
  7. 重新開機

  8. 現在你可以重新開機來測試一下你的核心了!當然,你也可以在開機過程中,出現 boot 時按下 tab 鍵,讓你選擇你要的開機檔!
     
  9. 換回舊核心

  10. 如果核心使用的不滿意怎麼辦?你可以如此的換回來原先的核心:
編譯核心有時候會遇到許多麻煩﹐尤其是當您從一個舊的版本升級上來。建議您看看 kernel-HOWTO 和 modules mini-howto 之外﹐還應該看看 /usr/src/linux/Documentation 裡面的文章﹐尤其是 Changes?modules.txt?kmod.txt 等。而且﹐在編譯(make menuconfig)的過程中﹐對任何不明白的選項﹐應該看看 Help 是怎麼說的﹐這非常重要。

另外,由於編譯核心並以新的核心開機之後,所有的模組都會到新的目錄去,如以上面的例子來看,以新的核心開機時,模組的載入會跑到 /lib/modules/2.2.18 中,所以如果你的網路卡不是模組中有的,而是自己安裝的,那你得在重新安裝一次到新的目錄中,否則你的網路將無法連接喔!

2002/ 01/01以來統計人數