我需要內核的源代碼
英文版由 JohnnyHughes 建立。現時由 AlanBartlett 及 AkemiYagi 維護。
1. 或許你不需要整個內核的源代碼
如果你需要編譯一個內核的驅動程式模塊,很大機會你並不是真的需要完整的內核源代碼。你可能只需要kernel-devel套件。(然而,假若你肯定須要完整的源代碼目錄樹,請遁從第二部份的指示。)
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-194.3.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
以 root 的身份安裝 rpm-build、redhat-rpm-config 及 unifdef 套件:
[root@host]# yum install rpm-build redhat-rpm-config unifdef
以一個不是 root 用戶的戶口,建立一個以 ~/rpmbuild 為基礎的目錄樹:
[user@host]$ cd
[user@host]$ mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
[user@host]$ echo '%_topdir %(echo $HOME)/rpmbuild' > .rpmmacros
我們強烈建議你不要以 root 的身份建立套件。(見: Building Source RPM as non-root under CentOS)
從這些地方找尋內核的源代碼:
(請選擇 <版本>/updates/SRPMS 或 <版本>/os/SRPMS)
一旦你找到源代碼套件,你可以執行這個指令來安裝它:
[user@host]$ rpm -i http://mirror.centos.org/centos/5/updates/SRPMS/kernel-2.6.18-194.3.1.el5.src.rpm 2>&1 | grep -v mockb
(針對 CentOS 5) — 或 —
[user@host]$ rpm -i http://mirror.centos.org/centos/4/updates/SRPMS/kernel-2.6.9-89.0.25.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/ 這個目錄內找得到。
2.2. CentOS 3
你可以用這個指令來安裝內核的源代碼:
[root@host]# yum install kernel-source
如果你的內核因為來自較舊的目錄樹而未被 yum 列出,你可以手動式地從 CentOS 地下室下載它。請選擇你所需的 CentOS 版本,然後為你的 架構 在 os/< 架構>/CentOS/RPMS/ 或 updates/< 架構>/RPMS/ 目錄內找尋 kernel-source-< 版本>.< 架構>.rpm 這個套件。
接著你可以這樣安裝它:
[root@host]# rpm -Uvh kernel-source-<version>.<arch>.rpm
Translation of revision 106