編譯內核
前提:
(1)準備好開發環境
(2) 獲取目標主機上硬件設備的相關信息
(3) 獲取目標主機系統功能的相關信息
例如:需要啟用相應的文件系統
(4) 獲取內核源代碼包
www.kernel.org
開發環境準備
包組(Centos 7):Development Tools
#yum grouplist 查看包組信息
目標主機硬件設備相關信息:
CPU: #cat /proc/cpuinfo
#lscpu
PCI設備:
lspci (-v|-vv)
lsusb (-v|-vv)
lsblk 塊設備
這是在虛擬機上做的實驗,可以把cpu設置成4核的,內存設置成2G,這樣可以快速的編譯:
步驟如下:
1、下載源碼文件:linux-4.12.tar ;并解壓縮到/root下
#tar xvf linux-4.12.tar
2、安裝開發包組
#yum groupinstall “Development Tools”
3、準備文本配置文件,為了省事,直接參考當前的內核配置文件作為要編譯的內核模塊:
#cd /boot
#cp /boot/config-3.10.0-514.e17.x86_64 /root/linux-4.12/.config
4、配置內核選項,通過菜單的方式,定義內核的選項:
cd /root/linux-4.12
運行 #make menucofig命令時,發現報錯,缺ncurses-devel包
#yum install ncurses-devel 安裝包
繼續運行#make menuconfig,會打開一個Kernel Configuration 配置窗口:如下圖
上圖中”[ ]“ 里*表示打到核心里,M:是以模塊方式打到核心里;空白就表示不設置。
上圖中選中General setup ,回車展開如下圖:
在下圖中輸入內核的版本,以及編譯者信息,可以自己隨便設定:
設置完內核選項后,按TAB建切換<Save> 保存然后推出。
設置好的內核選項,就被保存到了,/root/linux4.12/.config 文件里,可以查看已經設置的內容
5、開始編譯,操作如下圖:
通過lscpu 命令看到有4個CPU,內核編譯支持多線程編譯,執行命令:
# make -j 4 && for i in {1..10} ;do echo -e “-a”;sleep 1 ;done
由于編譯時間過長,這里編寫一個下循環,編譯結束時發聲,提醒便宜結束。
編譯過程發現報錯,如下圖:
上圖中提示缺少openssl工具;缺什么就安裝什么:yum -y install openssl-devel
然后繼續運行:# make -j 4 && for i in {1..10} ;do echo -e “-a”;sleep 1 ;done
編譯過程時間比較長,所以不要急。可以再打開一個終端窗口,cd /root/linux-4.12 下;
wach -n 5 du -sh . 可以每隔5秒統計一下大小,總計大小差不多9個多G.請耐心等待。
6、 當聽到發聲提醒時,說明第5 步已經完成了。然后執行如下操作:
make modules_install 安裝模塊。把/root/linux-4.12目錄下的大量的內核模塊包,復制生成到/lib/modules目下;
會生成一個文件夾如下圖:
7、 #make install
安裝內核相關文件 :安裝bzImage為/boot/vmlinuz-VERSION-RELEASE 生成initramfs文件, 編輯grub2的配置文件
8、重啟就可以選擇linux-4.12的內核啟動加載了。
在編譯完成后,那么怎么在已經執行過編譯操作的內核源碼樹做重新編譯呢?如下描述:
1、#make clean :清理大多數編譯生成的文件,但會保留condig文件等
2、#make mrproper :清理所有編譯生成的文件、config及某些備份文件
3、#make distclean : mrproper、patches以及編輯器備份文件
如果編譯有錯誤,或者還想用舊的內核啟動,那么怎么刪除新的內核呢?
只要把上述編譯的每一步驟生成的文件目錄刪除就可以了;如下操作:
1、rm -rf /lib/modules/4.12.0.1.0-wangkernel/
2、rm -rf /boot/*4.12* 把帶有4.12的文件都刪了。如下圖:
3、刪除/boot/grub2/grub.conf文件下生成的配置文件刪除了:如下圖選中的部分都刪除了;
原創文章,作者:shenjialong,如若轉載,請注明出處:http://www.www58058.com/80116