2006年5月15日 星期一

核心編譯(適用Fedora Core 4及5)

 Linux 的核心編譯是一件很有趣但挑戰性又高的事,之前在補習班拿到有關RHEL3的核心編譯步驟,但套用在目前的版本,有些步驟需要修改,於是查了一些文件,終於測試出完整的步驟。

 由於 Fedora 自 Core 3 起就不再將 kernel-source-<version>.i386.rpm 納入其中,於是我們只能從 kernel-<version>.src.rpm 取得 source 來重新編譯。
1.首先在編譯 kernel 之前,我們要先取得 kernel 的 SRPM,而 kernel-<version>.src.rpm 的取得方法有下列三種:
 a) 從 FC5 原始套件中取得 kernel 的 SRPM(此以 FC5 為例)
  http://download.fedora.redhat.com/pub/fedora/linux/core/5/source/SRPMS/
  下載:kernel-2.6.15-1.2054_FC5.src.rpm
 b) 從 FC5 更新套件中取得最新的 kernel SRPM(此以 FC5 為例)
  http://download.fedora.redhat.com/pub/fedora/linux/core/updates/5/SRPMS/
  下載:kernel-2.6.<最新版本>.src.rpm
 c) 透過”yum”取得 kernel 的 SRPM(此為 FC5 官方文件)
  # yum install fedora-rpmdevtools ← 安裝fedora-rpmdevtools套件
  # fedora-buildrpmtree ← 在HOME 底下產生 rpmbuild/ 的目錄
  # yum install yum-utils ← 安裝 yum-utils 套件
  # yumdownloader --source kernel ← 下載 kernel 的 SRPM
  註:此方法最後一道指令在FC5中下載失敗,無法取得 kernel 的 SRPM,在 FC4中下載正常。
2.安裝下載後的 kernel-<version>.src.rpm
 # rpm -ivh kernel-<version>.src.rpm
 安裝完後的 source 存放路徑為 /usr/src/redhat/
 註:若以 c) 步驟取得 SRPM 套件,並執行過 fedora-buildrpmtree,其安裝後存放路徑為<HOME>/rpmbuild/
◎以下操作以方法 b) 及核心版本 2.6.16 為例,方法 a) 相同,方法 c) 僅路徑不相同。
3.使用下列指令產生 kernel source
 # cd /usr/src/redhat/SPECS ← 方法 c) 為 <HOME>/rpmbuild/SPECS
 # rpmbuild -bp --target $(uname -m) kernel-2.6.spec ← 中間有空白,複製到記事本可看得更清楚
4.自訂 kernel 版本名稱
 # cd /usr/src/redhat/BUILD/kernel-2.6.16/linux-2.6.16 ← 方法 c) 為 <HOME>/rpmbuild/BUILD/kernel-2.6.16/linux-2.6.16
 # vi Makefile 
  VERSION = 2
  PATCHLEVEL = 6
  SUBLEVEL = 16
  EXTRAVERSION = -5.2006.Gavin ← 筆者將 prep 修改為自己定義的格式
  所產生的 kernel,其名稱將為「2.6.16-5.2006.Gavin」
◎以下操作目錄皆在 /usr/src/redhat/BUILD/kernel-2.6.16/linux-2.6.16。
5.清除之前編譯核心所遺留下的設定檔案(若第一次編譯可略過此步驟)
 # make mrproper
6.使用預設的 kernel 設定檔
 # cp /boot/config-2.6.15-1.2054_FC5 .config ← 將前一版設定檔複製成 .config
 RedHat 每一版本的 Linux,其 kernel 預設的設定檔皆放在 /boot 中,若自己對 kernel 中每一個項目都很熟悉的話,可不用複製;複製前一個 kernel 設定檔的好處是,我們可以依照 RedHat 原先預設的參數來修改,減少失敗率。
7.讀取預設的 .config 並根據系統原有硬體環境修改 .config
 # make oldconfig 一種讀取既有設定檔案(.config)的非互動式文字模式,且只會對之前不存在的新問題出現提示;若熟悉 kernel 中每一個項目要自己設定的話,可略過此步驟。
8.修改 .config 設定檔(有下例3種方式,任選一種即可,若無需修改可略過此步驟)
 a) # make config
  一個互動式的文字模式,元件以線性格式呈現,且一次只能操作一個,不允許改變之前問題的答案。
 b) # make menuconfig  文字介面的選單模式,較為簡便,可在純文字界面下執行編輯動作,如下圖。


 c) # make xconfig
  使用 X-Window 為主要環境的設定模式,如下圖。

  步驟7、8兩個步驟都可進行設定修改,或是任選一個步驟修改 kernel 參數,只要能達到自己所想要的目的即可。
9.清除上一版本編輯過程中所產生的檔案(若為第一次編輯可略過此步驟)
 # make clean
10.建立 kernel、產生 kernel 模組及安裝 kernel 模組
 # make bzImage modules modules_install
 此部份最為秏時,通常會超過半小時以上。
11.安裝編譯好的 kernel
 # make install
12.檢查 /boot/grub/grub.conf,並將新版的 kernel 設定為預設開機 kernel
 # vi /boot/grub/grub.conf
  default=0 ← 改為0,代表 2.6.16-5.2006_Gavin 為預設開機
  timeout=5
  splashimage=(hd0,0)/grub/splash.xpm.gz
  hiddenmenu
  title Fedora Core (2.6.16-5.2006_Gavin)
  ..............................................................................
13.重新開機,並檢查 kernel 版本是否正確
 # uname -r 2.6.16-5.2006_Gavin
資料參考來源:
1. 
Fedora 官方網站
2. Personal Fedora Core 5 Installation Guide
3. 恆逸所提供「RHEL 3 編譯核心」教材

沒有留言:

張貼留言