使用者工具

網站工具


os:linux:安裝_kernel_source

[Fedora 20]

  1. 安裝與 Kernel 相同版本的 kernel-devel 與 kernel-headers
  2. 可以由 uname -a 查出版號
    # uname -a
    Linux localhost.localdomain 3.11.10-301.fc20.i686+PAE #1 SMP Thu Dec 5 14:12:06 UTC 2013 i686 i686 i386 GNU/Linux
  3. 相同版本的檔案可由原始光碟取出, 並使用 rpm 安裝
    # rpm -ivh kernel-PAE-devel-3.11.10-301.fc20.i686.rpm
    # rpm -ivh kernel-headers-3.11.10-301.fc20.i686.rpm
  4. Make kernel, 但須要裝 gcc, g++ and ncurses
    # yum install gcc
    # yum install gcc-c++
    # yum install ncurses-devel
  5. make menuconfig
    # make menuconfig
  6. make
    # make vmlinux ⇐=未經壓縮的核心
    # make modules ⇐=僅核心模組
    # make bzImage ⇐=經壓縮過的核心(預設)
    # make all ⇐=進行上述的三個動作
  7. 但會有問題, 最後重新下載 kernel source 才可
    # wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.11.10.tar.xz

[CentOS 5/6/7]

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

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

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

  • kernel-devel(64 位元的架構)

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 位元的架構)

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

[root@host]# yum install kernel-devel

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

[root@host]# uname -r

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

2.6.18-412.el5xen

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

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

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

如果你的內核因為來自較舊的目錄樹而未被 yum 列出,你可以手動式地從 CentOS Vault下載它。

CentOS-7:請在 7.N.YYMM/os/x86_64/Packages/ 或 7.N.YYMM/updates/x86_64/Packages/ 目錄內找尋 kernel-devel-版本.x86_64.rpm

CentOS-6:請在 6.N/os/arch/Packages/ 或 6.N/updates/arch/Packages/ 目錄內找尋 kernel-devel-版本.架構.rpm

CentOS-5:請在 5.N/os/arch/CentOS/ 或 5.N/updates/arch/RPMS/ 目錄內找尋kernel[-類型]-devel-版本.架構.rpm

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

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

os/linux/安裝_kernel_source.txt · 上一次變更: 2016/10/07 00:24 由 eddie