1. 程式人生 > >Centos 7 源碼編譯安裝內核4.14.12

Centos 7 源碼編譯安裝內核4.14.12

virt 不常用 family 重啟 移動 界面 text 備份文件 sof

為什麽要編譯內核

需要新功能的支持:

在生產環境中,突然會需要使用一些新的功能,但是原有的內核並不支持此功能,這是就需要重新編譯出一個新的內核來提供對此新功能的支持,比如虛擬化、iptables功能必須要在2.4.X以上版本的內核中才支持。


原核心太過於臃腫:

原來安裝的內核中,有很多不常用甚至基本上用不到的功能支持,而這些功能又會使內核文件變得很大,這時要將此變成一個簡化切功能夠用的內核就需要進行重新編譯。


與硬件搭配的穩定性:

很多情況下,系統內核中默認一般默認支持的CPU類型為Inter,但在其它廠商,如AMD或者是較新的CPU硬件上使用此系統,可能就不能很好的支持,且不穩定。因此就需要重新編譯內核來支持最新的硬件驅動。


其它特殊需求:

linux除了在pc機上運行,當然也能支持一些其它設備,比如嵌入式的APM、智能手機等,這時或許就要進行重新編譯支持的CPU架構來支持這些特殊需求。

總結一點:kernel的作業就是所需要的硬件支持,因此在此基礎上只加需要的功能,來實現內核文件的短小精幹。


實驗環境:VMware Workstation Pro 14(試用版)

系統平臺:

CentOS Linux release 7.4.1708 (Core) 內核 3.10.0-693.el7.x86_64


步驟如下:

內核源碼官網,請下載標記為stable的版本

https://www.kernel.org/

本次編譯的源碼版本為

stable:

4.14.12

2018-01-05


1.準備編譯環境

a.至少準備10GB的磁盤剩余空間

b.# yum -y groups install "Development Tools"

# yum -y install ncurses-devel elfutils-libelf-devel bc openssl-devel.x86_64


2.解壓源碼包

#tar xvf linux-4.14.12.tar.xz

源碼包解壓後的大小為979M


3.在當前已經安裝的系統中的/boot目錄下存在一個名為conf-xxx 的文件,那個文件其實就是核心功能列表選擇文件,如

-rw-r--r--. 1 root root 140894 Aug 22 17:21 config-3.10.0-693.el7.x86_64

copy當前系統內核中的config-xxx文件到需要編譯的內核目錄下。這一步不是必須的,可以用來參考之前系統的內核選項。

#cp config-3.10.0-693.el7.x86_64 /kernel/linux-4.14.12


4.所有操作均在源碼編譯目錄內進行

#cd /kernel/linux-4.14.12/


編碼內核選擇界面(生成.config的方法):

make help

支持更新模式進行配置

make menuconfig

基於curses的文本窗口界面

make gconfig

基於GTK(GOME)環境窗口界面

make xconfig

基於QT(KDE) 環境的窗口界面

make oldconfig

透過已經存在的./.config文件內容,

並使用該文件內設定值為默認值,

只將新版本核心的新功能列出讓用戶選擇,

可以簡化核心功能挑選過程。對與升級內核很好選擇。

make defconfig

基於內核為目標平臺執行提供的“默認”配置進行配置

make allyesconfig

所有選項均回答為”yes”

make allnoconfig

所有選項均回答為”no”

make mrproper

清理所有編譯生成的文件、 config及某些備份文件

make clean

清理大多數編譯生成的文件,但會保留config文件等

make distclean

mrproper、 patches以及編輯器備份文件


5.使用make menuconfig 命令進行菜單化界面來選擇內核功能:

技術分享圖片技術分享圖片

技術分享圖片技術分享圖片

左右箭頭鍵:用來移動選擇最下面的select、exit、help、save、load幾個按鈕

上下箭頭鍵:可移動上面的菜單來選中對應的功能選項,選項後與--> 表示內部有子菜單需要選擇。

選定項目:使用上下鍵選擇設定的項目,並使用左右鍵選擇select按鈕,然後按回車就可進入項目中 的子菜單選擇。

挑選功能:在項目的功能名稱前面,有 [ ]或者 < > 才可以使用 空格鍵 來選擇。

挑選說明:

[ ]: 不編譯此項

[M]: 表示編譯成模塊,也就是存放在/lib/modules/內核版本號/

< * > [ * ] : 表示編譯進核心,也就是/boot下的vmlinuz-內核版本號 文件

功能選擇的建議:

核心一定要的功能,直接編譯進核心內;

可能以後會用到的功能,盡量編譯成模塊;


離開選擇項:左右鍵選擇Exit按回車即可


一些編譯項目如下:

[*] 64-bit kernel

General setup ---> 基本的linux核心功能,最相關的驅動程序、版本說明 核心說明代碼

[*] Enable loadable module support ---> 模塊加載和卸載

-*- Enable the block layer ---> 塊設備的支持

Processor type and features ---> 處理器類型和其功能選擇

Power management and ACPI options ---> 電源管理和ACPI選項

Bus options (PCI etc.) ---> 總線選項和PCI插槽

Executable file formats / Emulations ---> 編譯後執行檔的格式

[*] Networking support ---> 核心網絡功能

Device Drivers ---> 設備驅動

Firmware Drivers --->

File systems ---> 文件系統的支持

Kernel hacking --->

Security options ---> 安全相關模塊

-*- Cryptographic API --->

[*] Virtualization --->

Library routines --->


這裏以編譯2個功能為演示

(Hunk-2018v1.0) Local version - append to kernel release 追加內核版本

[*] Automatically append version information to the version string 自動追加版本號

DOS/FAT/NT Filesystems ---> 核心層支持NTFS 文件系統格式讀寫

技術分享圖片

都選擇好核心功能後,記得選擇SAVE保存


6.編譯

要想快一點,可以查詢當前系統CPU有幾個核

#lscpu

CPU(s): 4


為了防止意外發生,開啟一個screen窗口,命令功能請自行man

#screen -S kernel

#make -j 4

編譯好之後的源碼目錄為9.8G

#make -j 4 modules


7.編譯後安裝

#make modules_install

#make install

安裝好之後,會在/boot內生成對應的內核相關文件

技術分享圖片技術分享圖片

模塊目錄也會生成/lib/modules/4.14.12Hunk-2018v1.0

技術分享圖片技術分享圖片

#cat /boot/grub2/grub.cfg

menuentry 'CentOS Linux (4.14.12Hunk-2018v1.0) 7 (Core)'


8.檢查無誤後,重啟以便使用新內核

技術分享圖片技術分享圖片

#uname -r

4.14.12hunk-2018-1.0


至此,內核編譯安裝成功。


編譯中的一些選擇

?全編譯: make [-j #]

?編譯內核的一部分功能:

(a) 只編譯某子目錄中的相關代碼

進入源碼文件夾內

# make dir/ 註意,不要進到那個需要編譯指定部分功能的子目錄。

(b) 只編譯一個特定的模塊

cd /usr/src/linux

# make dir/file.ko

例如:只為e1000編譯驅動:

# make drivers/net/ethernet/intel/e1000/e1000.ko


卸載內核

? 刪除/lib/modules/目錄下不需要的內核庫文件

#rm -rf 4.14.12hunk-2018-1.0/

? 刪除源碼目錄

? 刪除/boot目錄下啟動的內核和內核映像文件

#rm *-4*

rm: remove regular file ‘initramfs-4.14.12hunk-2018-1.0.img’? y

rm: remove regular file ‘initramfs-4.14.12hunk-2018-1.0.img.gz’? y

rm: remove regular file ‘System.map-4.14.12hunk-2018-1.0’? y

rm: remove regular file ‘vmlinuz-4.14.12hunk-2018-1.0’? y

? 更改grub的配置文件,刪除不需要的內核啟動列表

# vim /boot/grub2/grub.cfg


Centos 7 源碼編譯安裝內核4.14.12