測試環境: CentOS 4.1
核心版本: 2.3.13
文章日期: 2006/06/23
在安裝好一個 Linux Distribution (e.g CentOS, Fedora, Debian) 後,系統已經內建一個經過發行商設定及編譯好的 Linux 核心 (kernels)。一般上因為發行商希望他們的發行版適用於大部份的系統,所以會編譯成較為「通用」,而自行編譯則可以根據自己的需要,將不同的選項加入核心內,所以一般上效能也會較發行版內建的為高。
另外兩個自行編譯的理由,就是希望使用新版本核心才有的功能,以及有些硬件是現有核心未能支援,本文將會簡單介紹編譯核心的步驟。
準備工作
在編譯前先要搞清楚自己電腦內的硬件,好讓不要在編譯時選漏一些必要的項目,或者選了一大堆沒有用的,如果你確實清楚電腦內有什麼硬件,那便可以略過以下步驟。先執行以下兩個指令:
# cat /proc/cpuinfo
以上指令分別會輸出類似以下內容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# /sbin/lspci 00:00.0 Host bridge: Intel Corporation 82815 815 Chipset Host Bridge and Memory Controller Hub (rev 02) 00:01.0 PCI bridge: Intel Corporation 82815 815 Chipset AGP Bridge (rev 02) 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 02) 00:1f.0 ISA bridge: Intel Corporation 82801BA ISA Bridge (LPC) (rev 02) 00:1f.1 IDE interface: Intel Corporation 82801BA IDE U100 (rev 02) 00:1f.2 USB Controller: Intel Corporation 82801BA/BAM USB (Hub #1) (rev 02) 00:1f.3 SMBus: Intel Corporation 82801BA/BAM SMBus (rev 02) 00:1f.4 USB Controller: Intel Corporation 82801BA/BAM USB (Hub #2) (rev 02) 01:00.0 VGA compatible controller: nVidia Corporation NV5M64 [RIVA TNT2 Model 64/Model 64 Pro] (rev 15) 02:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10) 02:09.0 Multimedia audio controller: C-Media Electronics Inc CM8738 (rev 10) cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 8 model name : Pentium III (Coppermine) stepping : 6 cpu MHz : 866.833 cache size : 256 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr sse bogomips : 1735.70 |
如果想將以上內容儲存成檔案,只需輸入:
# cat /proc/cpuinfo >> /root/hardward.conf
這樣兩個指令的內容就會儲存到 /root/hardward.conf 內。
編譯及配置核心
在寫這篇文章時,最新核心版本是 2.6.13,我會以此核心作為例子,先按以下連結下載該核心:
Linux 2.6.13
P.S. 想下載最新的核心源始碼,可以 http://www.kernel.org/ 下載。
先將下載回來的檔案放到 /usr/src/ 目錄下,然後執行以下指令:
# 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 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 前一行即可:
1 2 3 4 |
title CentOS-4 i386 (2.6.13) root (hd0,0) kernel /vmlinuz-2.6.13-mk6 ro root=/dev/VolGroup00/LogVol00 rhgb quiet initrd /initrd-2.6.13-mk6.img |
建議保留原先核心在 /boot/grub/grub.conf 內,因為如果新編譯出來的核心不能開機,也可以用舊核心來補救。
P.S. 如果是使用 LILO, 只需編輯 /etc/lilo.conf,過程與 GRUB 大同小異。
最後重新開機,如果能夠成功開機及測試無誤後,那便可以考慮將舊核心刪除。