寫在前面:
博客書寫牢記5W1H法則:What,Why,When,Where,Who,How。
本篇主要內容:
● kernel編譯安裝
kernel編譯安裝
回顧:
源碼包編譯安裝步驟:
(1)編譯環境:開發軟件包組、頭文件、庫文件
(2)./configure
(3)make
(4)make install
kernel編譯安裝:
(1)開發環境
包組:
Development Tools
Server Platform Development
其他:
make menuconfig依賴包:ncurses-devel
(2)獲取目標主機硬件設備相關信息
CPU:
a) cat /proc/info
b) lscpu
c) x86info -a
PCI設備:
a) lspci
-v
-vv
b) lsusb
-v
-vv
c) lsblk
瞭解全部硬件設備信息:
hal-device
(3)獲取目標主機系統功能相關信息,如要啓用的文件系統等
(4)獲取內核源碼包:www.kernel.org
(5)編譯過程
a) tar -xJf linux-3.10.67.tar.xz -C /usr/src
b) cd /usr/src
c) ln -sv linux-3.10.67 linux
編譯過程需要有linux目錄,我們這裏建立軟鏈接
d) cd linux
e) make menuconfig
配置內核選項,會彈出圖形化界面,對模塊進行個性化配置。
此步驟會在目錄中生成.config文件,每一個安裝完成的系統都會有這樣的.config文件,默認爲/boot/config-`uname -r`,可以拷貝過來使用
選項含義:
[ ]不編譯此模塊
[*]將此模塊編譯進內核
[M]將此模塊編譯爲動態模塊,放入/lib/modules目錄
備註:此步驟可以有多種方式,查看後續過程詳細說明。
f) make [-j #]
-j # 可以指定以多線程方式執行,這裏的數字不應該超過cpu核心數
g) make modules_install
安裝內核模塊
h) make install
安裝內核
i) grub2-set-default MENU_ENTRY
對grub2引導的系統,設置默認啓動內核。
對grub引導的系統,修改/boot/grub/grub.conf的default項即可。
j) reboot
注意:由於編譯過程需要很長時間(雙核大概要1小時),通過ssh遠程連接 很可能由於某些原因導致ssh掉線,進而導致整個編譯過程錯誤。所以建議使用screen命令。
screen
screen會建立一個獨立的bash窗口,供用戶運行命令,即便用戶遠程登錄斷開,也不會影響到screen內運行的命令。所有的輸出都會打印到screen內,用戶可以隨時查看輸出信息。
打開screen:screen
拆除screen:Ctrl+a,d
列出screen:screen -ls
連接至screen:screen -r SCREEN_ID
關閉此screen:exit
編譯過程詳細說明:
(1)配置內核選項
支持“更新”模式進行配置,在已有的.config文件的基礎上進行“修改”配置:
(a) make config
基於命令行,以遍歷的方式去配置內核中可配置的每個選項;
(b) make menuconfig
基於cureses文本配置窗口,圖形選項方式
(c) make gconfig
基於GTK開發環境的窗口界面,包組“桌面平臺開發”
(d) make xconfig
基於QT開發環境的窗口界面。
支持“全新配置”模式進行配置:
(a) make defconfig
基於內核爲目標平臺提供的“默認”配置爲模板,進行配置
(b)make allnoconfig
將所有選項均設置爲“no”
(2)編譯
(a)多線程編譯
make [-j #]
(b)只編譯內核中的部分代碼
(a)按目錄劃分的部分代碼
cd /usr/src/linux
make path/to/dir/
(b)只編譯特定的模塊
cd /usr/src/linux
make path/to/dir/file.ko
這裏的file.ko並不一定僅匹配file.ko,如file.ko不存在,也會匹配爲file.c
(c)交叉編譯
目標平臺與當前編譯平臺不同
make ARCH=arch_name
獲取幫助:
make ARCH=arch_name help
(3)編譯清理操作
在事先編譯過的目錄再次編譯前,需要先進行清理操作
make clean
清理大多數文件,但會保留配置文件.config以及編譯外部模塊所需的文件
make mrproper
清理編譯生成的所有文件,包括匹配文件及某些備份文件
make distclean
相當於mrproper,額外清理各種patches以及編輯器備份文件
實例:
[root@www ~]# cd /tmp [root@www tmp]# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.1.20.tar.xz [root@www tmp]# screen [root@www tmp]# tar -xJf linux-4.1.20.tar.xz -C /usr/src/ [root@www src]# ln -sv linux-4.1.20 linux ‘linux’ -> ‘linux-4.1.20’ [root@www src]# cd linux [root@www linux]# make menuconfig #界面如下圖 [root@www linux]# make -j 2 [root@www linux]# make modules_install [root@www linux]# make install #查看grub2配置文件,發現多了一個menuentry條目 [root@www linux]# cat /boot/grub2/grub.cfg ...省略輸出... menuentry 'CentOS Linux (4.1.20) 7 (Core)' ...省略輸出... [root@www linux]# grub2-set-default 'CentOS Linux (4.1.20) 7 (Core)' [root@www linux]# reboot