Linux 編譯客制化核心

測試環境: CentOS 4.1
核心版本: 2.3.13
文章日期: 2006/06/23

在安裝好一個 Linux Distribution (e.g CentOS, Fedora, Debian) 後,系統已經內建一個經過發行商設定及編譯好的 Linux 核心 (kernels)。一般上因為發行商希望他們的發行版適用於大部份的系統,所以會編譯成較為「通用」,而自行編譯則可以根據自己的需要,將不同的選項加入核心內,所以一般上效能也會較發行版內建的為高。

另外兩個自行編譯的理由,就是希望使用新版本核心才有的功能,以及有些硬件是現有核心未能支援,本文將會簡單介紹編譯核心的步驟。

準備工作

在編譯前先要搞清楚自己電腦內的硬件,好讓不要在編譯時選漏一些必要的項目,或者選了一大堆沒有用的,如果你確實清楚電腦內有什麼硬件,那便可以略過以下步驟。先執行以下兩個指令:

# /sbin/lspci
# cat /proc/cpuinfo

以上指令分別會輸出類似以下內容:

如果想將以上內容儲存成檔案,只需輸入:

# /sbin/lspci >> /root/hardward.conf
# cat /proc/cpuinfo >> /root/hardward.conf

這樣兩個指令的內容就會儲存到 /root/hardward.conf 內。

編譯及配置核心
在寫這篇文章時,最新核心版本是 2.6.13,我會以此核心作為例子,先按以下連結下載該核心:

Linux 2.6.13

P.S. 想下載最新的核心源始碼,可以 http://www.kernel.org/ 下載。

先將下載回來的檔案放到 /usr/src/ 目錄下,然後執行以下指令:


# tar zxvf linux-2.6.13.tar.gz
# cd linux-2.6.13
# make mrproper //如果是第一次編譯該核心,可以省略
# make menuconfig

這時會看見一個選單,是將核心內各種不同的功能分類,只要用上、下按鍵選擇所以分類,按 Enter 就可進入,如果退出先前位置只需按 Esc。
而如果需要將功能編譯到核心,就移到該項目上,使用 Space 鍵選擇。* 號代表編譯進核心;M 代表以模組方式編譯;空白代表不選用。

因為這裡的配置項目有很多,所以我只會找出幾個較重要的介紹。

1. Code maturity level options
這時代表還在開發中的功能,除非這些功能你用得上,否則可以不選擇

2. Processor type and features -> Processor family
這個較為重要,是選擇 CPU 類型,選錯了有機會導致不能開機,而選得適當可以增加系統的效能。

當選擇好需要的項目後,便按 Esc 鍵,系統會詢問你是否需要儲存,只要選擇 “Yes” 便可以儲存先前的改動,並回到命令列。

然後順序輸入以下指令: (輸入 make all 後可以去嘆杯茶)

# make all
# make modules_install
# depmod -a
# mkinitrd /boot/initrd-2.6.13.img 2.6.13

P.S. 以上的 make all 是 make vmlinux, make modules, make bzImage 3 個指令的集合。

更換核心
當以上編譯動作完成後不代表可以立即使用,還是設定開機管理程式,以下是 GRUB 修改方法:

1. GRUB
使用文書編輯軟件 (例如 vi) 打開 /boot/grub/grub.conf,你應該會見到已經有目前的核心在那裡,只要將以下內容加入到 title 前一行即可:

建議保留原先核心在 /boot/grub/grub.conf 內,因為如果新編譯出來的核心不能開機,也可以用舊核心來補救。

P.S. 如果是使用 LILO, 只需編輯 /etc/lilo.conf,過程與 GRUB 大同小異。

最後重新開機,如果能夠成功開機及測試無誤後,那便可以考慮將舊核心刪除。


Leave a Reply