我需要內核的源代碼
英文版由 JohnnyHughes 建立。現時由 AlanBartlett 及 AkemiYagi 維護。
1. 或許你不需要整個內核的源代碼
如果你需要編譯一個內核的驅動程式模塊,很大機會你並不是真的需要完整的內核源代碼。你可能只需要kernel-devel套件。(然而,假若你肯定須要完整的源代碼目錄樹,請遁從第二部份的指示。)
CentOS-6 只有一個 kernel-devel 套件:
- kernel-devel(32 及 64 位元的架構)
CentOS-5 總共有三個 kernel-devel 套件:
- kernel-devel(32 及 64 位元的架構)
- kernel-xen-devel(32 及 64 位元的架構)
- kernel-PAE-devel(只支援 32 位元的架構)
CentOS-4 總共有五個 kernel-devel 套件:
- kernel-devel(32 及 64 位元的架構)
- kernel-smp-devel(32 及 64 位元的架構)
- kernel-xenU-devel(32 及 64 位元的架構)
- kernel-hugemem-devel(只支援 32 位元的架構)
- kernel-largesmp-devel(只支援 64 位元的架構)
如果你使用 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
