其實應該在安裝完 Linux 之後便開始編譯核心,因為每個人所需要的核心都並不相同!舉個例子來說,你安裝了一個很新的網路卡,但是你的核心並不支援這一種網路卡,那你只好下載比較新的核心來編譯,才能支援你的網路卡!另外,由於太大的核心對於整體的執行效能會比較慢,所以適當的核心對於你的 Linux 系統之執行效率也是有幫助的!因此,一般的玩家通常在安裝完了 Linux 之後,便開始進行核心的重新編譯工作!在 study-area 也曾提到:Linux的靈魂所在﹐其實就是其穩定的核心設計。我們可以將之看成是一個架於程式和硬體之間的界面操作系統﹐離開來核心﹐什麼東西都用不了。而核心的編譯好壞﹐也會影響到系統的效能﹐甚至﹐一些系統功能(如 ip networking)﹐就必須要編進核心才行。
不過,由於核心的更新速度太快了,如果你一直執著於最新的核心編譯,那肯定會吃不消,所以通常我們的建議就是,除非你有新的需求,否則可以不用常常去更新核心的!
[root@tsai
/root]# uname -r
2.2.12-20 |
好啦,那要選擇哪一個核心版本呢?目前你可以看到的核心版本主要有 2.2.X, 2.3.X 及 2.4.X,哪一個才適合你呢?我想,既然我們需要的是穩定版的 Linux ,那自然選擇越穩定的越好囉,那基本上,所有 2.2.X 及 2.4.X 的都是屬於穩定型的核心版本,至於 2.3.X 則是適合開發 Linux 軟體的核心!另外,2.4.X並不是比2.2.X還新的意思,基本上,所有 2.2.X 及 2.3.X 與 2.4.X 都是同時開發的核心,只是因為其支援的程度或者是一些功能方面不完全相同,所以才會分成這些版本!而目前我們所想要使用的應該是 2.2.X 這個版本的系列核心,截至目前為止,這一版的最新核心應該是 2.2.19 這一個,當然,你也可以下載其他的核心!
另外,你也可以在我這裡下載 linux-2.2.19.tar.gz
這個核心版本。基本上,最好是在系統安裝完畢之後馬上就進行核心編譯工作,免得以後每次裝一些特定功能的時候又要花一大輪時間編譯。另外要說明的,由於小弟是以
2.2.18 這一版的核心來做升級的動作,所以以下是以 2.2.18 來做示範!
[root@tsai
/root]# cd /usr/src/
[root@tsai src]# rm linux [root@tsai src]# tar -zxvf /root/linux-2.2.18.tar.gz [root@tsai src]# mv linux linux-2.2.18 [root@tsai src]# ln -s linux-2.2.18 linux |
編譯核心有許多方法,這裡以視窗介面的方法來說明:
- 進入核心目錄: cd /usr/src/linux
- 開始設定畫面: make menuconfig
- 進入選擇項目:
進入選擇項目之後,你將會在視窗介面中看到很多的選項,請使用方向鍵、空白鍵與 enter 來進行選擇。以下開始你要慢慢的詳細挑選,如果有任何問題的話,請詳細的看一下每一個選項中的 Help 。另外,如果沒有需要的話,請盡量不要把核心邊的太大!否則效能是會降低的喔!此外,由於很多時候你不曉得需不需要選擇這個項目,那你可以將之編成模組(<M> 的項目),模組是在開機載入時有被載入才可以執行的咚咚!所以並不會使效能方面有太大的問題!
- Code maturity level options:請選擇。這個項目主要在讓你可以接受一些測試的版本的套件。
- Processor type and features:請選擇進入,選你的 CPU 形式。
- Processor family:例如鳥哥的 CPU 為 P-166 則我可以選擇 Pentium/K6/TSC/CyrixIII 這一項!
- Math emulation:這一項請不要選擇,因為這是用軟體來模擬硬體的計算核心,因為我們的 CPU 都是 P-100 以後的,所以不用選這項!
- Symmetric multi-processing support:這是是否支援 雙CPU 的主機板的選項,你可以選擇也可以不選擇,但如果你使用雙CPU主機板,這個就一定要選擇。
- 其他保持預設值即可。
- Loadable module support:請選擇,這是用來是否支援模組載入的。
- Enable loadable module support:請選擇。
- Set version information on all symbols for modules:不要選,因為我們可能會具有兩種以上的版本的核心,所以這一項不可選擇。
- Kernel module loader:請選擇。
- General setup:
- Networkking support:一定要選擇。
- PCI support:請選擇。
- Advanced Power management BIOS support:如果您的BIOS支持APM的話﹐請選擇。
- Power off on shutdown:如果您選擇了上一個﹐也請選擇。
- 其他,保留預設,或視實際情況設定。 例如我們實驗室的機器需要與 SGI 的機器聯繫,所以就多選擇了 SGI Visual Workstation support 這一項。
- Plug and Play support:將之全部選擇。
- Block devices:裡面放置了一些晶片組的選項,通常以預設值就可以了,不過,如果你的主機板是最近的版子,例如 VIA 的 82C586 晶片組,哪就必須進來選擇你的晶片組啦!
- Networking options:這是所有項目裡面最重要的了,底下的選擇
- Network firewalls﹐請選擇。
- Socket Filtering﹐請選擇。
- TCP/IP networking﹐請選擇。
- IP: multicasting﹐請選擇。
- IP: advanced router﹐請選擇。
- IP: police routing﹐請選擇。
- IP: verbose route monitoring﹐請選擇。
- IP: firewalling﹐請選擇。
- IP: use FWMARK value as routing key﹐請選擇。
- IP: transparent proxy support﹐請選擇。
- IP: masquerading﹐請選擇。
- IP: ICMP masquerading﹐請選擇。
- IP: masquerading special modules support﹐請選擇。
- IP: ipautofw masq support﹐請選擇為 Module。
- IP: ipportfw masq support﹐請選擇為 Module。
- IP: ip fwmark masq-forwarding support﹐請選擇為 Module。
- IP: optimize as router not host﹐請選擇。
- IP: multicast routing﹐請選擇。
- IP: aliasing support﹐請選擇。
- IPX: Full internal IPX network﹐如果您的網路有Novell伺服器﹐請選擇。
- IPX: SPX networking﹐如果您的網路有Novell伺服器﹐請選擇。
- 其他﹐保留預設﹐或視實際情況設定。
- Telephony Support:保留預設值。
- SCSI support:除非你有 SCSI 的設備,否則可以選擇成為 M 的模組型態。
- Network device support:這個也是很重要的選項,與你的網路卡有關!
- Dummy net driver support:非常建議選擇。
- Ethernet (10 or 100Mbit):除非您使用其他的網路形態﹐否則這個一定要選擇。
- 3 COM cards:除非您的網路卡是這個牌子的﹐否則不選擇。
- Western Digital/SMC cards:除非您的網路卡是這個牌子的(或兼容)﹐否則不選擇。
- RealTek 8912/8139 (not 8019/9029!) support:除非您的網路卡是這 8912或8139這兩個確切型號﹐否則不選擇﹐不過﹐也可以選“M”。
- Other ISA cards:如果您有ISA網卡的話﹐可以選擇。
- NE2000/NE1000 support:如果您不知道您的網路卡型號﹐這個可以試試選擇。
- EISA, VLB, PCI and on board controllers:請選擇。
- PCI NE2000 support:如果您用的是PCI網路卡﹐又不知道型號﹐這個可以試試選擇。
- EtherExpressPro/100 support:如果您有此類網卡﹐請選擇。
- Pocket and protable adaptors:如果您使用PCMCIA網卡﹐可以試試選擇。
- 基本上在這個選項當中,就是選你有的網路卡的形式就對了!
- FDDI driver support:如果您沒用使用FDDI﹐請不要選擇。
- Frame relay DLCI support:如果您沒用使用Frame relay﹐請不要選擇。
- PPP (point-to-point) support:這個一定要選擇。
- SLIP (serial line) support:如果您知道您ISP使用SLIP﹐可以選擇。
- Token Ring driver support:如果您的網路不是這個形態﹐請不要選擇。
- 至於其他﹐如果確定不使用的﹐就不要選擇﹐如果不確定﹐可以保留預設﹐或將之設成“M”。
- Amateur Radio support :有才選擇,通常不選。
- IrDA (infrared) support:有才選擇,通常不選。
- ISDN subsystem:有才選擇,通常不選。
- Old CD-ROM drivers (not SCSI, not IDE):有才選擇,通常不選。
- Character devices:有才選擇,通常不選。
- USB support:有才選擇,通常不選。
- Filesystems:這個與你的 Linux 系統可支援的檔案型態有關,一定要進來選擇。
- Quota support:請選擇。
- DOS FAT fs support:請選擇。
- MSDOS fs support:請選擇。
- VFAT (Windows-95) fs support:請選擇。
- ISO 9660 CDROM filesystem support:請選擇。
- Microsoft Joliet CDROM extensions:請選擇。
- NTFS filesystem support (read only):請選擇。
- OS2/HPFS filessystem support (read only):如果您的機器還有OS/2系統﹐請選擇。
- Network File Systems:請展開﹐喜歡的話﹐可以全部選擇﹐但我們只關心‘NFS’和‘SMB’的部分。
- Partition Types:除非您找到相關項目﹐否則可以不理會。
- Native Language Support:請展開﹐然後選擇﹕
- Codepage 850
- Codepage 950
- NLS ISO 8859-1
- Console drivers:除非您確定﹐否則保留預設。
- Sound:如果您用的是Creative的SB16﹐或兼容聲卡﹐可以不理會。
- Kernel hacking:保留預設則可。
這樣就編完了,請按下『exit』然後選擇 save 後,即可離開視窗畫面。
- 更改前一版的模組目錄:
再來則是要開始讓系統編譯你剛剛設定的核心了,此時請注意,如果你使用的核心版本之前你已經有編過一次了,那樣的話,在 /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 成功之後,會在你的根目錄造成兩個重要的檔案,就是我們最重要的核心開機程式了,分別是:vmlinuz 及 System.map 這兩個檔案。
好了,編譯完就是要安裝啦!由於害怕剛剛編譯完的核心不能正常的開機,所以通常鳥哥都是手動來設定成多重開機的選單,好讓我們如果發生錯誤的設定,可以直接再次開機來進入 Linux 系統。2002/ 01/01以來統計人數編譯核心有時候會遇到許多麻煩﹐尤其是當您從一個舊的版本升級上來。建議您看看 kernel-HOWTO 和 modules mini-howto 之外﹐還應該看看 /usr/src/linux/Documentation 裡面的文章﹐尤其是 Changes?modules.txt?kmod.txt 等。而且﹐在編譯(make menuconfig)的過程中﹐對任何不明白的選項﹐應該看看 Help 是怎麼說的﹐這非常重要。
- 移動兩個主要的開機檔到 /boot 中:並加以更改名稱
如此一來,則你的開機執行的 System.map 會找尋 2.2.18 這一版的資訊!
[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
- 編輯你的 /etc/lilo.conf 多重開機設定檔:
這裡就必須比較小心了,因為設定錯誤會讓你開不了機的!只要設定一個檔案就好了,那就是 /etc/lilo.conf 這個檔案。重要的地方在於 default=linux-2.2.18 這一行,以及 image=/boot/vmlinuz-2.2.18 兩行,需要指定正確才行!基本上這樣就設定成功了!
[root@tsai /boot]# vi /etc/lilo.conf
進入 vi 的編輯畫面,原始的 lilo.conf 有點像這樣:
----
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linuximage=/boot/vmlinuz-2.2.12-20
label=linux
initrd=/boot/initrd-2.2.12-20.img
read-only
root=/dev/hda5other=/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/hda5image=/boot/vmlinuz-2.2.18 <==這是新的核心喔!
label=linux-2.2.18
read-only
root=/dev/hda5other=/dev/hda1
label=windows
- 啟動 lilo :
這個時候請打入:你會看到如上的說明,可以看到 linux-2.2.18 有打星號,這表示預設的開機檔是以 linux-2.2.18 的核心來開機的!
[root@tsai /boot]# lilo
Added linux-2.2.12-20
Added linux-2.2.18 *
Added windows
- 重新開機:
現在你可以重新開機來測試一下你的核心了!當然,你也可以在開機過程中,出現 boot 時按下 tab 鍵,讓你選擇你要的開機檔!
- 換回舊核心:
如果核心使用的不滿意怎麼辦?你可以如此的換回來原先的核心:
- 進入 /boot 中,將 System.map 的連結檔換成 System.map-2.2.12-20 這一個,
- 編輯 /etc/lilo.conf 檔案,將預設的開機檔改成 linux-2.2.12-20 ,
- 最後再執行 lilo 即可!
另外,由於編譯核心並以新的核心開機之後,所有的模組都會到新的目錄去,如以上面的例子來看,以新的核心開機時,模組的載入會跑到 /lib/modules/2.2.18 中,所以如果你的網路卡不是模組中有的,而是自己安裝的,那你得在重新安裝一次到新的目錄中,否則你的網路將無法連接喔!