我需要建立一個自設的核心
英文版本由 RalphAngenendt 建立。現在由 AlanBartlett 及 AkemiYagi 維護。
Contents 編譯前的準備 設定核心 核心的 ABI 更改核心的 spec 檔案 編譯新核心 你肯定嗎。CentOS 被設計以一個完整的環境去運作。如果你替換一個最要的組件,它很可能會影響系統其它部份的運作。
你絕對肯定嗎。說真的,99.9% 的使用者已經不再須要重建自己的核心:你可以單單建立一個模組。若是這樣,你可參考「建立你自己的核心模組」。
你所需的功能可否通過安裝 ELRepo 計劃的某個核心模組來提供。 你所需的功能是否由現有核心的一個獨立模組所提供。
你所需的功能是否由 CentOSPlus 軟體庫內的 plus 核心所提供。 最後警告……如果你損壞你的核心或者系統,你除了要承擔一切後果,你亦要獨個兒解決問題,及埋怨自己令系統不能引導。
為 CentOS 建立自設的核心有兩個方法:第一個是利用加了自設選項的 CentOS 原始碼;另一個是利用來自 Linux Kernel Archive的主流核心原始碼。
這份教學文檔教授如何利用你自己的選項或改動,配合 CentOS 的原始碼來建立一個核心。它主要是針對 CentOS-5 而寫成。請留意由 符號所置標、關於在其它版本 CentOS 上建立核心的備忘。
(如果你希望建立一個主流的核心,切勿依照 How To Compile A Kernel 內的指引。這個網站不被認可,因為它不安全地教導以 root 建立核心,方法本身就有毛病。詳細理由請參閱 Building Source RPM as non-root under CentOS。建立主流核心的一個良好參考指南是 Linux Kernel in a Nutshell 這本書。)
|
這些行動都只供你個人使用。開發小組並不支援自設的核心,因為他們不能控制你的編譯環境、選擇項目等。如果你選擇建立自設的核心,當有安全性更新、新發行、或任何須要進行維護的情況出現,你要獨力肩負起這個責任。 |
1. 編譯前的準備
要成功地建立一個核心,你須要安裝下列組件:
yum groupinstall "Development Tools" # 這樣做會確定你擁有編譯時間所需的一切工具。
yum install ncurses-devel # 你必須這樣才能讓 make *config 這個指令正確地執行。
yum install qt-devel # 如果你打算用 make xconfig 而不是 make gconfig 或 make menuconfig,才須要這樣做。
yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel # 建立 CentOS-6 核心時需要它們。
整個核心的原始碼樹。 請跟從「我需要核心代源碼」第 2 部份內的指引。
當上述 yum 指令執行時,請留意有否組件被排除。假若 yum 設定檔記憶體有保護核心及相關組件的 exclude 項目,它們亦必須被刪除。 請注意,為不想損失的內容建立最新及已測試的備份永遠是個明智的做法。縱使 CentOS 計劃普遍並不鼓勵有這類 exclude 規限,要是你真的如上述所說有被排除的組件,請明白某些發行商不允許未經修改的核心在他們的環境上運行。有關這個主題的詳盡資料,請參閱 不健全的虛擬伺服器這篇文章的第三節。
如果你想加入任何核心的修正,請於現在複製它們到 SOURCES 目錄內。
2. 設定核心
如果你在建立一個 CentOS-6 核心,請在整份教學文檔內用 2.6.32 取代 2.6.18。
|
|
如果你不打算修改發行核心的設定檔,你可以忽略這部份。你只需進行最後一步:
[user@host] $ cp ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`/configs/* ~/rpmbuild/SOURCES |
建立好編譯用的目錄後,現在是時候修改核心的設定。請進到 ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`/ 目錄,然後將以下其中一個檔案複製成為這個目錄內的 .config 檔。
複製 ./configs/ 目錄內的正確類型設定檔(CentOS-5:base、xen、PAE 如果是 32 位元結構;CentOS-4:base、smp、xenU、hugemen 如果是 32 位元結構、largesmp 如果是 64 位元結構),或者複製現有核心在 /boot/config-`uname -r` 的設定檔。
你可選擇從 ./configs/ 目錄複寫正確類型的設定檔:
針對 CentOS-6:只需 base(不用定義類型) 針對 CentOS-5:base、xen、或(假若是 32 位元結構)PAE
或者從 /boot 目錄複寫現有核心的設定檔。
請參考下面的範例:
[user@host]$ cd ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.`uname -m`
你可選用 —
[user@host]$ cp configs/kernel-2.6.18-`uname -m`[-type].config .config
— 或 —
[user@host]$ cp /boot/config-`uname -r` .config
首先執行 make oldconfig。現在你應該執行 make menuconfig、make gconfig 或 make xconfig 來自定核心的設定。當你完成後,請記得儲存你對設定的改動。
|
|
如果你安裝了整個核心的原始碼來建立一個核心模組,你應該在這裡停手。請你現在便參考「建立你自己的核心模組」教學文檔。 |
接著,在你將設定檔複製回 configs/ 目錄前,請先將注釋了的硬體平台(相等於 uname -i 指令的輸出)的一行加在設定檔的頂部。這個在 32 位元結構上是 i386,在 64 位元結構上是 x86_64。這個符串必須以 # 符號來注釋,而且必需是檔案的頭一行。請留意 # 符號與硬體平台的描述中間必須有一個空格。
請在 .config 檔案的頂部加入以下一行: