我需要內核的源代碼

英文版由 JohnnyHughes 建立。現時由 AlanBartlettAkemiYagi 維護。

1. 或許你不需要整個內核的源代碼

如果你需要編譯一個內核的驅動程式模塊,很大機會你並不是真的需要完整的內核源代碼。你可能只需要kernel-devel套件。(然而,假若你肯定須要完整的源代碼目錄樹,請遁從第二部份的指示。)

CentOS-6 只有一個 kernel-devel 套件:

CentOS-5 總共有三個 kernel-devel 套件:

CentOS-4 總共有五個 kernel-devel 套件:

如果你使用 standard 內核(舉個例說),你可以這樣安裝 kernel-devel:

[root@host]# yum install kernel-devel

你可以用這個指令來斷定使用中的內核版本:

[root@host]# uname -r

它的輸出會有以下的樣子:

2.6.18-274.17.1.el5xen

在這個範例裡,所安裝的內核是 xen,而安裝相關的 kernel-devel 套件的方法是:

[root@host]# yum install kernel-xen-devel

<!> 請確定你已經安裝了與你採用的內核吻合kernel-devel 套件。詳情請參閱這條常見問題

如果你的內核因為來自較舊的目錄樹而未被 yum 列出,你可以手動式地從 CentOS 地下室下載它。請選擇你所需的 CentOS 版本,然後為你的 架構os/架構/CentOS/RPMS/ 或 updates/架構/RPMS/ 目錄內找尋 kernel[-類型]-devel-版本.架構.rpm 這個套件。

當你安裝了合適的 kernel[-類型]-devel-版本.架構.rpm,便可以嘗試編譯你的模塊。這樣做是應該行得通的。假若事實並非如此,請提供回饋給模塊的開發者,因為這是設計所有新內核模塊時應採用的編譯方式。

2. 如果你真的需要整個內核的源代碼

如果你真的因為某個原因需要整個內核的源代碼,它是有被提供的。

2.1. CentOS 4、5 及 6

以 root 的身份安裝 rpm-build、redhat-rpm-config 及 unifdef 套件:

[root@host]# yum install rpm-build redhat-rpm-config unifdef

以一個不是 root 用戶的戶口,建立一個以 ~/rpmbuild 為基礎的目錄樹:

[user@host]$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
[user@host]$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

<!> 我們強烈建議你不要以 root 的身份建立套件。(見:Building Source RPM as non-root under CentOS

從這些地方找尋內核的源代碼套件:

(請以相關的更新版本編號取代 N。)

一旦你找到源代碼套件,你可以執行這個指令來安裝它:

[user@host]$ rpm -i http://vault.centos.org/6.2/updates/Source/SPackages/kernel-2.6.32-220.4.1.el6.src.rpm 2>&1 | grep -v mockb

(針對 CentOS 6)— 或 —

[user@host]$ rpm -i http://vault.centos.org/5.7/updates/SRPMS/kernel-2.6.18-274.17.1.el5.src.rpm 2>&1 | grep -v mockb

(針對 CentOS 5)— 或 —

[user@host]$ rpm -i http://vault.centos.org/4.8/updates/SRPMS/kernel-2.6.9-103.EL.src.rpm 2>&1 | grep -v mockb

(針對 CentOS 4)現在源代碼套件已經安裝了,請解壓及預備源代碼檔案:

[user@host]$ cd ~/rpmbuild/SPECS
[user@host SPECS]$ rpmbuild -bp --target=`uname -m` kernel-2.6.spec 2> prep-err.log | tee prep-out.log

`uname -m` 這個數值(注意:是鈍音符號,不是單引號)將 --target 設定為你的現有內核的架構。一般來說应是可行的,因為多數人會擁有 i686 或 x86_64。

現在內核的源代碼目錄樹可以在 ~/rpmbuild/BUILD/ 這個目錄內找得到。

Translation of revision 132

zh-tw/HowTos/I need the Kernel Source (last edited 2012-02-06 06:50:30 by TimothyLee)