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
編輯可以依據目的,將系統全部編輯一次,或是單存編譯某一項功能.
- 重新編輯核心以及所有的模組
詳細步驟請參考 https://benjr.tw/247Remove 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