【心得分享】Linux編譯核心

顯示結果從第 1 筆 到 2 筆,共計 2 筆
  1. #1
    就這樣吧! bentong 的大頭照
    註冊日期
    2001-06-10
    所在地區
    數位電子訊號+足夠的頻寬
    討論區文章
    200

    【心得分享】Linux編譯核心

    [說明] 由於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 檔案



  2. #2
    會員
    註冊日期
    2001-12-10
    討論區文章
    237
    感謝您的賜教!

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

類似的主題

  1. 【軟體】Vigor2500WE心得分享
    作者:ted69626 所在討論版:---- ADSL 軟 硬 體 技 術
    回覆: 7
    最後發表: 2004-07-11, 04:21 PM
  2. 【求助】編譯核心出錯
    作者:creeping-jesus 所在討論版:-- FreeBSD & Linux 討 論 版
    回覆: 2
    最後發表: 2004-01-04, 02:02 PM
  3. 【求助】編譯核心之後,Quota無法正確啟用
    作者:achilles 所在討論版:-- FreeBSD & Linux 討 論 版
    回覆: 0
    最後發表: 2003-03-20, 07:21 PM
  4. 關於重新編譯核心~
    作者:Man 所在討論版:-- FreeBSD & Linux 討 論 版
    回覆: 1
    最後發表: 2002-02-09, 05:16 AM
  5. 各廠牌CDROM心得分享
    作者:Ares 所在討論版:-- 電 腦 硬 體 討 論 版
    回覆: 2
    最後發表: 2001-07-23, 05:10 PM

 

Boot sector 512 bytes. Setup is 2520 bytes.

發表文章規則

  • 不可以發表新主題
  • 不可以回覆文章
  • 不可以上傳附加檔案
  • 不可以編輯自己的文章
  •