【心得分享】Linux編譯核心



贊助商連結


bentong
2002-07-28, 01:49 AM
[說明] 由於gaga0625這個版本的kernel對USB裝置支援不完整, 須重新編譯核心來解決

0. 寫在前面
當您對系統操作並不熟悉時, 建立安全回復的觀念是很重要的, 安裝光碟(RH7.3 CD1)
可以提供您最嚴重的系統救援, 從CD-ROM boot後, 您會先看到安裝畫面, 然後輸入
(就是不要按Enter, 不然它又重新安裝了)
boot : linux rescue
依其指示會進入免password的命令列, 然後鍵入
chroot /mnt/sysimage
你就可以進入系統裡, 對你先前的修改進行回復的動作了,
當然您最好具備像 vi, cp, mv, cd, pwd, chmod ..... 等基本指令的使用方法

1. 確定當前kernel版本
# uname -r
2.4.18-5 <主版本>.<次版本>.<修訂版本>-<副版本>

2. 取得kernel 的source code(不是binary喲!)
2-1. 直接在 /usr/src/linux-2.4.18-5就可以找到 source code
2-2. 使用安裝光碟上的核心版本 (RH7.3 是在 Disk2 裡面)。
/mnt/cdrom/RedHat/RMPS/kernel-source-2.4.18-5.i386.rpm
並且執行安裝, 安裝完成後可在 /usr/src/linux-2.4.18-5找到原始檔
2-3. 從網路上取得kernel source

*建議您在/usr/scr/下建立一個 link(你也可以嘗試使用不同路徑)﹕
ln -sf linux-2.4.18-5 linux

(以下的說明如無特別標註皆以/usr/scr/linux為預設路徑, 你也可以嘗試使用不同路徑)
3. 編譯前的安全備份
3-1. 準備開機片(如果你先前做過,則不必重複)
mkbootdisk --device /dev/fd0 `uname -r`
(用 uname -r 命令是找出您當前的核心版本﹐如果您確定是 2.4.18-5 ﹐
那可以直接用版本號碼來代替。)
3-2. 備份 lib modules
執行 ls /lib/modules 看看裡面有沒有一個目錄和編譯版本相同名字﹐如果有﹐
用 ‘mv’命令將之改名﹐如﹕
mv /lib/modules/2.4.18-5 /lib/modules/2.4.18-5.bak
3-3. 然後再為 /lib/modules 、 /boot、和 lilo.conf 做一個備份
(因為這些是將要被變更的部份)﹕
cp -af /lib/modules /lib/modules.bak
cp -af /boot /boot.bak
cp -af /etc/lilo.conf /etc/lilo.conf.bak

4. 設定 ./config檔
設定 ./config檔的工具很多, 在RH7.3裡也內建了至少兩種的圖形介面設定程式
make xconfig
詳情請參考 : http://www.study-area.net/linux/system/linux_kernel.htm

5. 開始編譯
請按順序輸入﹕
make dep # 建立相依關係
make clean # 清除舊有的object檔
make bzImage # 建立核心檔 ( arch/i386/boot/bzImage)
make modules # 建立模組 ( drivers, net, fs, kernel, ... etc.)
make modules_install # 將模組安裝至系統 (/lib/modules/2.4.18-5)

當您 make bzImage 順利完成之後﹐您應該會看到幾行信息﹐告訴您核心的大小﹕
Root device is (3, 5)
Boot sector 512 bytes.
Setup is 2520 butes.
System is 789 kB
假如您碰到 warning: kernel is too big for standalone boot from floppy 的話﹐
那就要考慮回去將內建的選項改為模組﹐或儘量減少。
否則﹐您將不能為這個核心製作開機磁片﹐也不能運用下面提到的核心安裝測試程序。

6. 測試核心
先將一張空白磁片放進軟碟機﹐然後輸入﹕
make bzdisk
這可能需要一點時間﹐等完成之後﹐輸入﹕
reboot

7. 某些時候因為外掛模組的關係, 必須重新建立initrd檔案, 請執行
mkinitrd /boot/initrd-2.4.18-5

8. 安裝核心(當測試都沒問題時)
8-1. 如果新的核心是沒問題﹐也就是能用新核心的 floppy 開機的話, 等我們重新登入系統後﹐再回到 /usr/src/linux 目錄裡面﹐然後執行﹕
make install
這個動作和 make bzdisk一樣﹐只不過將核心安裝到硬碟而已。
它會將核心裝在 /boot 目錄去
8-2. 請檢查那裡﹐如果您發現﹕vmlinuz-2.4.18-5 這個檔案﹐那就是核心了﹗
除了核心檔之外﹐您應該還會看到 System.map-2.4.18-5 這樣的檔案﹕
# ls -l /boot/vmlinuz*
/boot/vmlinuz -> vmlinuz-2.4.18-5
/boot/vmlinuz-2.4.18-5

# ls -l /boot/System.map*
/boot/System.map -> System.map-2.4.18-5
/boot/System.map-2.4.18-5

如果您不執行 make install 的話﹐可以手工的直接從 /usr/src/linux
目錄下面將相關檔案複製到 /boot 裡面去﹕
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.18-5
cp /usr/src/linux/System.map /boot/System.map-2.4.18-5
ln -sf /boot/vmlinuz-2.4.18-5 /boot/vmlinuz
ln -sf /boot/System.map-2.4.18-5 /boot/System.map

9.修改grub.conf的開機選項
(因為我用grub做開機管理, 如果用lilo就請修改lilo.conf)
然後重新啟動系統,這樣就大功告成了!

[後記]
如果你要了解開機程序是如何進行的
請檢視 /var/log/messages 檔案

贊助商連結


jiannhua
2002-07-28, 01:13 PM
感謝您的賜教!

順便請問一下您的頭像好像是中山高的標誌吧?國道一號