從Src rpm 編譯 自己修改的核心

來源:互聯網
上載者:User
我需要建立一個自設的核心

英文版本由 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 檔案的頂部加入以下一行:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.