1,045 瀏覽數

CentOS7 編譯核心

CentOS7 編譯核心所需套件,因為套件很多建議直接使用 groupinstall 或是 group install.

[root@localhost ~]# yum groupinstall "Development Tools"

還需要 ncurses (new curses)這個程式函式庫.

[root@localhost ~]# yum install ncurses-devel

用用 make xconfig 會使用到 x-window ,所以需要安裝 qt ,如果是 make gconfig 或 make menuconfig 則不需要.

[root@localhost ~]# yum install qt-devel 
[root@localhost ~]# yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel

最重要的是版本核心的 Source Code ,雖然 CentOS 有提供 kernel-devel 可以供編輯,但是不見得所有的 source code 都會包含在裡面,建議可以直接到 https://www.kernel.org/pub/linux/kernel/ (X86_64 , ARM 都是使用相同的核心原始碼) 下載類似版本的核心來編譯.

[root@localhost ~]$ cd /usr/src/
[root@localhost src]$ wget https://cdn.kernel.org/pub/linux/kernel/v3.x/linux-3.10.105.tar.xz 
[root@localhost src]$ tar Jxvf linux-3.10.105.tar.xz
[root@localhost src]$ cd linux-3.10.105

編輯可以依據目的,將系統全部編輯一次,或是單存編譯某一項功能.

  • 重新編輯核心以及所有的模組
    詳細步驟請參考 http://benjr.tw/247

    Remove all generated files + config + various backup files (第一次編輯時為非必要)

    [root@localhost linux-3.10.105]$ make mrproper
    

    產生 .config 核心設定檔
    借用安裝系統時所產生的核心設定檔

    [root@localhost linux-3.10.105]$ cp /boot/config-3.10.0-514.6.1.el7.x86_64 .config
    

    自行編輯,修改設定檔
    Update current config utilising a provided .config as base

    [root@localhost linux-3.10.105]$ make oldconfig
    

    Update current config utilising a QT based front-end,其他類似的還有 config , nconfig , menuconfig , gconfig ,更多的方式可以使用 make help 來查詢.

    [root@localhost linux-3.10.105]$ make xconfig
    

    這三個字母所代表的意思 N(None) ,M(Module) , Y(Kernel)

    相依性可以參考個別資料夾 Kconfig 裡面的說明
    Build the bare kernel

    [root@localhost linux-3.10.105]$ make vmlinux
    

    Build all modules

    [root@localhost linux-3.10.105]$ make modules
    

    Compressed kernel image (arch/x86/boot/bzImage)

    [root@localhost linux-3.10.105]$ make bzImage
    

    上面幾個步驟可以直接使用 all (vmlinux,modules,bzImage) 取代.

    [root@localhost linux-3.10.105]$ make all
    

    Install all modules to INSTALL_MOD_PATH (default: /)

    [root@localhost linux-3.10.105] make modules_install 
    

    Install compressed kernel

    [root@localhost linux-3.10.105]$ make install
    
  • 單存編譯某一項功能
    M=表示要編輯此目錄下的原始檔案,並指定 CONFIG_I2C_SMBUS (m) 編譯成為模組.

    [root@localhost linux-3.10.105]$ make CONFIG_I2C_SMBUS=m M=drivers/i2c
    

常見的問題
缺 gcc

[root@localhost linux-3.10.105]$ make oldconfig
/bin/sh: gcc: command not found
make[1]: *** [scripts/basic/fixdep] Error 127
make: *** [scripts_basic] Error 2

[root@localhost linux-3.10.105]$ yum install gcc

缺 qt-devel

[root@localhost linux-3.10.105]$ make xconfig
* Unable to find the QT4 tool qmake. Trying to use QT3
*
* Unable to find any QT installation. Please make sure that
* the QT4 or QT3 development package is correctly installed and
* either qmake can be found or install pkg-config or set
* the QTDIR environment variable to the correct location.
*
make[1]: *** No rule to make target `scripts/kconfig/.tmp_qtcheck', needed by `scripts/kconfig/qconf.o'.  Stop.
make: *** [xconfig] Error 2

[root@localhost linux-3.10.105]$ yum install qt-devel

缺 yum install gcc-c++

[root@localhost linux-3.10.105]$ make xconfig
/bin/sh: g++: command not found
make[1]: *** [scripts/kconfig/qconf.o] Error 127
make: *** [xconfig] Error 2

[root@localhost linux-3.10.105]$ yum install gcc-c++

缺 libssl-dev (Ubuntu 則為 libssl-dev)

[root@localhost linux-3.10.105]$ make 
fatal error: openssl/aes.h: No such file or directory

[root@localhost linux-3.10.105]$ yum install openssl-devel

缺 bc

[root@localhost linux-3.10.105]$ make vmlinux
/bin/sh: bc: command not found
make[1]: *** [kernel/timeconst.h] Error 127
make: *** [kernel] Error 2

[root@localhost linux-3.10.105]$ yum install bc

發表迴響