編譯內核linux
爲何須要編譯內核?編輯器
linux發行商爲了使其發行版在高低硬件平臺「通用」,以較低平臺進行了編譯。爲了發揮硬件平臺的新特性,咱們須要把新特性加入到內核中。ide
怎樣進行編譯呢? spa
前提:命令行
(1) 準備好開發環境;線程
(2) 獲取目標主機上硬件設備的相關信息;orm
(3) 獲取到目標主機系統功能的相關信息,例如要啓用的文件系統; ci
(4) 獲取內核源代碼包:www.kernel.org開發
準備開發環境:源碼
CentOS 6.7:
包組:Development Tools 、 Server Platform Development
CentOS 7:
包組:Development Tools 、Server Platform Development
包:ncurses-devel 基於文本的內核配置窗口包
爲了實現交叉編譯須要獲取目標主機上硬件設備的相關信息:
CPU:
~]# cat /proc/info
~]# lscpu
~]# x86info -a
PCI設備:
~]# lspci
-v 詳細
-vv 更詳細
~]# lsusb
-v 詳細
-vv 更詳細
~]# lsblk 塊設備
瞭解所有硬件設備信息:之後udev定位某設備的時候可參考
~]# hal-device
內核編譯過程:
步驟:
~]# tar xf linux-3.10.67.tar.xz -C /usr/src
~]# cd /usr/src
~]# ln -s linux-3.10.67 linux
~]# cd linux
~]# make menuconfig 配置內核選項
注:menuconfig 是基於文本的內核配置窗口包ncurses-devel
~]# make [-j #] 編譯內核,可以使用-j指定編譯線程數量
~]# make modules_install 安裝內核模塊
~]# make install 安裝內核
能夠試試新內核了,在grub裏指向新內核,重啓系統,選擇使用新內核。
內核編譯的拓展說明:
(1) 配置內核選項:支持「更新」模式進行配置:在已有的.config文件的基礎之上進行「修改」配置;
(a) make config:基於命令行以遍歷的方式去配置內核中可配置的每一個選項;
(b) make menuconfig:基於cureses的文本配置窗口;
(c) make gconfig:基於GTK開發環境的窗口界面。注包組「桌面平臺開發」
(d) make xonfig:基於QT開發環境的窗口界面;注:須要安裝KDE開放組件
支持「全新配置」模式進行配置:
(a) make defconfig:基於內核爲目標平臺提供的「默認」配置爲模板進行配置;
(b) make allnoconfig:全部選項均爲「no」;
(2) 部分編譯
(b) 編譯內核中的一部分代碼:
(i) 只編譯某子目錄中的相關代碼:
# cd /usr/src/linux
# make path/to/dir/
(ii)只編譯一個特定的模塊
# cd /usr/src/linux
# make path/to/dir/file.ko
(c) 如何交叉編譯:目標平臺與當前編譯操做所在的平臺不一樣;
# make ARCH=arch_name
要獲取特定目標平臺的使用幫助:# make ARCH=arch_name help
當前平臺的幫助 # make help
(3) 如何在執行過編譯操做的內核源碼樹上作從新編譯:
事先清理操做:
# make clean:清理編譯生成的絕大多數文件,但會保留config,及編譯外部模塊所須要的文件;
# make mrproper:清理編譯生成的全部文件,包括配置生成的config文件及某些備份文件;
# make distclean:至關於mrproper,額外清理各類patches以及編輯器備份文件;
爲何用到screen?
screen是爲了解決當遠程編譯內核時候,由於時間過長遠程鏈接斷開致使編譯失敗。它能夠打開一個新的界面保存那一刻的狀態。
screen命令用法:
打開screen: ~]# screen
拆除screen: Ctrl+a, d
列出screen: ~]# screen -ls
鏈接至screen: ~]# screen -r SCREEN_ID
關閉screen: ~]# exit