如果您想要在一個新硬體系統上運作Linux,或者想要使用一些原本核心沒有支援的特點,也許或 者您想減少核心所占的記憶體使系統記憶體運作的更好,您會發現必須建立自己所定的核心。 更新核心包含了組態所需的模組,編譯核心及模組,最後安裝核心映像檔,隨著
如果您想要在一個新硬體系統上運作 Linux ,或者想要使用一些原本核心沒有支援的特點,也許或
者您想減少核心所占的記憶體使系統記憶體運作的更好,您會發現必須建立自己所定的核心。
更新核心包含了組態所需的模組,編譯核心及模組,最後安裝核心映像檔,隨著重新開機而載入新的
核心。在``README'中這些所有的文件都來自於每個核心套件。進一步的資訊可以在
``Documentation/' 子目錄中找到。一個特別有幫助的檔案是``Configure.help' ,其中包含了有
關編譯核心的選項及模組的詳細資訊。
下面是一個例,顯示如何建立自己的 Intel 平台 2.0.36 版核心。建立訂的核心常常只是組態,
編譯及安裝上的問題。有時(通常因為新的硬體) 需要
下載新的驅動程式,因為原本核心編譯時該硬體
尚未被支援。
建立訂核心的第一個步驟是下載及安裝核心,不論是來自 RPM (優先選擇) 或從 tarball。參考
第10章,Linux 核心的升級 一節 有關獲得合適檔案的詳細資料。
下一步,使用 ``rpm' 公用程式 (或 ``tar',也可以) 安裝核心來源及標頭檔。例如,安裝
2.0.36-3 核心的 RPM 檔:
rpm -Uvh kernel-source-2.0.36-3.i386.rpm kernel-headers-2.0.36-3.i386.rpm
rpm -Uvh kernel-ibcs-2.0.36-3.i386.rpm
(如果您在筆記型電腦上運作Linux,您或許想要安裝 ``kernel-pcmcia-cs-2.0.36-3.i386.rpm' 這個
檔,它提供了電源管理的功能)
在安裝好核心檔之後,您應該可以找到新的原始檔,位在 ``/usr/src/
linux/' 目錄。
下一個步驟是下載任何附加的驅動程式檔 (如果有的話),並且安裝他們在新的核心來源。例如,要增加
對 Mylex DAC960 硬體 RAID 控制器的支援,我會從網站上下載驅動軟體。不幸地,像
http://www.dandelion.com/ 網頁上的驅動軟體常常只有提供 tarball 而且需要 ``tar' 公用程式去安
裝它。例如:
cd /usr/src/
tar zxvpf DAC960-2.0.0-Beta4.tar.gz
可能的話,您應該閱讀由您所增加驅動程式軟體所提供的文件。例如 DAC960 驅動程式包括了 ``README'
檔案,裡面有關於哪裡下載最新的驅動程式,及如何索取核心的修正檔:
mv README.DAC960 DAC960.[ch] /usr/src/linux/drivers/block
patch -p0 < DAC960.patch
下面步驟是確保您的系統符號檔案連結和新的核心相符。事實上,這個步驟只需要作一次,所以下面步驟只
有在您從未編譯過自己的核心情形下才需要:
mail:/usr/src# cd /usr/include
mail:/usr/include# rm -rf asm linux scsi
mail:/usr/include# ln -s /usr/src/linux/include/asm-i386 asm
mail:/usr/include# ln -s /usr/src/linux/include/linux linux
mail:/usr/include# ln -s /usr/src/linux/include/scsi scsi
注意: 上述步驟在 2.2.x 或更高版本核心已不再需要。
下一個步驟是組態您的核心。這是建立訂核心的最重要步驟,如果您 disable 錯誤的設定,可能漏
失您所需要的特性或硬體支援。然而,如果您 enable 了錯誤的設定,您會無謂地擴大核心而且浪費珍貴
的系統記憶體 (說是這麽說,但在以後犯錯而不是之前可能比較好)
確保您的核心編譯正常的最好辦法是:了解您所需要使用的特性是什麽,您的系統中哪些硬體需要支援。
在您有幾次訂核心的經驗後,這些過程會變為 “過時?而且不具威脅 !
鍵入下列各項開始進行組態程序:
mail:/usr/include# cd /usr/src/linux
mail:/usr/src/linux# make mrproper
mail:/usr/src/linux# make menuconfig
(如果您執行 X Window 系統可以鍵入 ``make xconfig' 取代 ``make menuconfig'; 參考 第 5 章 有
關如何使 X 運作的細節.)
要組態您的核心,必須經由種種的設定及選擇 (enable) 哪一些是您需要的,並且剔除 (disable)您所不
需要的。您可以選擇直接經由核心支援,或是建立依
需求可由核心載入或卸下的模組。(如果您編譯了一個
事實上需要重新啟動系統的功能,像是 SCSI 驅動程式,如果是模組,您需要建立 RAMdisk 映像檔或系統
必須重新啟動。這是使用 ``mkinitrd' 這個命令去完成; 這個程序在下面會談到)
當進行這些組態設定時, 您可以選擇
獲得有關核心各個選項的描述
在您完成對核心的組態設定後,鍵入下列命令編譯您的核心:
mail:/usr/src/linux# make dep ; make clean
mail:/usr/src/linux# make bzImage
mail:/usr/src/linux# make modules
如果您重新編譯和之前相同的核心 (在本例中是 2.0.36-3 ),您或許會想要用下面的指令將現有的模組移
到備份的目錄下:
mail:/usr/src/linux# mv /lib/modules/2.0.36-3 /lib/modules/2.0.36-3-backup
現在,鍵入下列指令真正地安裝新的模組:
mail:/usr/src/linux# make modules_install
下一個步驟是將核心到 ``/boot/' 目錄下,並且使用 LILO 更新 boot record ,如此一來新的核
心就會被承認。下面的指令會將現有核心作一個備份,新的核心取代它,然後更新 LILO boot record:
mail:/usr/src/linux# cd /boot
mail:/boot# cp vmlinuz vmlinuz.OLD
mail:/boot# cp /usr/src/linux/arch/i386/boot/bzImage vmlinuz-2.0.36
mail:/boot# /sbin/lilo
最後,您需要編輯 ``/etc/lilo.conf' 檔,並且確定 “image”是指向新的核心。您也應該加入一個項目
指向您的備份核心,也許稱作“OldLinux”. 這是一個例檔:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz
label=Linux
root=/dev/hdb1
read-only
image=/boot/vmlinuz.OLD
label=OldLinux
read-only
藉由此種方法備份您的核心資訊,萬一您的新核心無法正常啟動(也許因為某設備不被承認,或者一個
daemon 應該啟動而未啟動),您可以簡單地鍵入 ``OldLinux' 從原來的核心啟動然後檢查系統。
注意: 如同前面所提到,如果您已經編譯了一個需要以模組方式啟動系統的核心,您需要建立一個起始
RAMdisk 映像檔以便啟動系統。(別忘了將您的核心編譯成可支援這樣的映像檔)
建立及使用起始 RAMdisk 映像檔的程序如下:
在您的 ``/etc/lilo.conf'加入項目,以便啟動起始 RAMdisk 映像檔; 這裡是一個先前已經展示過的組態
檔增加的例子,: image=/boot/vmlinuz
label=Linux
root=/dev/hdb1
initrd=/boot/initrd-2.2.4-4.img
read-only
在您可以使用 mkinitrd 指令前要先載入loopback 裝置. 確定 loopback 裝置模組已經載入: /sbin/insmod loop
(如果您得到有關無法載入loopback 模組的錯誤訊息,您可能需要指定給目前正在運作的核心該模組完整路
徑,例如 ``/lib/modules/2.0.35/loop'.)
使用 ``mkinitrd' 指令真正地建立映像檔: /sbin/mkinitrd /boot/initrd-2.0.36-3.img 2.0.36-3
執行 ``/sbin/lilo' 更新您的 boot loader.
現在,關閉系統且啟動新的核心!
mail:/boot# /sbin/shutdown -r now
如果您的核心拒絕完成啟動,別驚慌。利用在安裝 Linux 時所作的開機磁片開機。如果您沒有該磁片,
應該可以利用Red Hat CD作。插入磁片然後重新啟動電腦。當您看到“boot:” 提示時,鍵入:
mount root=/dev/hda1
上述的指令假設您的“/” (root) partition 位於 /dev/hda1.
Linux 應該然後正常地啟動 (既然您是使用開機磁片開機,在這期間不是所有的裝置及服務都能正常動作),
然後您可以回存您的舊核心然後重新安裝 LILO boot loader 的資料
(亦即. ``mv /vmlinuz.old /vmlinuz ; /sbin/lilo') 然後關機/重新啟動。然後您可以試著用不同選項重
新編譯核心再試一次。