CentOS7編譯核心

2021-08-09 18:45:15 字數 2993 閱讀 8551

下面記錄了我在centos7上編譯新核心的過程。

實驗室的一台伺服器上裝且僅裝了centos7,核心版本為3.10.0-327.el7.x86_64。

我要在當前系統上,編譯、安裝核心4.1.16。

sudo yum install gcc g++ gdb make
如果這些程式已經安裝了,則什麼都不會做;否則,會安裝相應工具。

cd /usr/src/kernels/

sudo tar -zxvf ~/installer/linux/src/linux-4.1.16.tar.gz

解壓之後會在/usr/src/kernels/下有乙個linux-4.1.16的資料夾。

進入原始碼根目錄:

cd /usr/src/kernels/linux-4.1.16/
核心的編譯引數非常多,配置的方式也有很多種,為了保持對當前系統的相容,我選擇了在已有核心編譯引數的基礎上進行配置。

把已有核心的編譯配置copy過來:

sudo cp /boot/config-3.10

.0-327.el7.x86_64 ./.config

在已有核心基礎上進行配置:

make oldconfig
這個命令的意思是:.config中有的就不再配置了,只列出這裡面沒有的讓使用者選擇。輸入這條命令後,就會有乙個接乙個的選項讓你選擇,懶得看就一路回車就行了,此時會按預設配置。敲回車大約敲個兩三分鐘的樣子,然後配置就完成了,在原始碼根目錄下會生成乙個.config檔案,這就是這次編譯的引數配置,之前copy過來的.config檔案變成了.config.old。

這裡檢視cpu資訊主要是看cpu核的個數,一會兒編譯的時候可以讓多個cpu同時工作,這樣編譯比較快。

cat /proc/cpuinfo
這時螢幕會列印出所有cpu的資訊,找到其中「processor : [數字]」表示對cpu的編號,這個編號從0開始,所以找到最後乙個「processor : [數字]」,[數字]+1就是你的cpu數。我的機器最後乙個cpu編號為「processor : 15」,所以我有16個核。

進入原始碼根目錄:

cd /usr/src/kernels/linux-4.1.16/
執行編譯:

sudo make -j16

all

其中,「make all」是編譯所有選擇的模組,「-j16」是可選引數,表示允許16個任務同時進行,這樣比較快,16是我機器中cpu核的個數。

這個過程通常比較慢長,跟選擇編譯的專案、硬體效能有關,由於我是用16個cpu同時編譯的,所以比較快,十幾分鐘吧。如果是單cpu,呵呵噠。。。

編譯只是把原始碼變成可執行檔案,但目前為止,這些可執行檔案並沒有被放置到相應的目錄下,新核心也沒有註冊給引導程式。

安裝模組:

sudo make modules_install
執行完這條命令,核心模組的可執行檔案會被copy到/lib/modules/下,進入這個目錄可以看到有乙個名為4.1.16的資料夾,這裡面便是這個核心模組的可執行檔案。

註冊啟動項:

sudo make install
這個命令是將該核心註冊給引導程式,當開機啟動的時候,引導程式會呼叫註冊給它的核心來啟動系統,如果有多個核心,使用者可以選擇從哪個核心啟動。

到這裡,理論上就可以重啟機器、從新核心進入系統了,但是,我遇到了一些問題。當然,你不一定會遇到。

這個問題出現在執行「sudo make install」的時候,因為這個命令要往/boot/下寫東西,而我的/boot掛載的分割槽又已滿。沒有找到動態擴容的好辦法,重灌系統、自定義分割槽,給/boot分了1gb的空間,再執行到這一步的時候,問題解決了。

這個問題出現在重啟、選擇新核心啟動的時候,***x是一串字串。很明顯,機器認為啟動分割槽的uuid是***x,但是找不到這個uuid的分割槽。

新核心是進不去了,強行關機,重啟,選擇之前的核心進入系統。

檢視/boot掛載的分割槽:

df
通過這條命令看到了掛載在/boot的裝置是/dev/sda1。然後再看/dev/sda1的uuid是啥:

ls -l /dev/disk/by

-uuid

/

可以看到/dev/sda1的uuid不是***x(表示一串字串),而是yyyy(表示另一串字串),所以,是註冊啟動項的時候出了錯。那就手動註冊一下吧。

先到/boot/下刪除之前「sudo make install」時生成的檔案(如果有),有關4.1.16的檔案、資料夾全刪掉。

將核心的映象檔案copy到啟動分割槽:

sudo

cd /usr/src/kernels/linux-4.1.16/arch/x86_64/boot/

sudo cp ./bzimage /boot/vmlinuz-4.1.16

將核心的編譯配置copy到啟動分割槽:

sudo

cd /usr/src/kernels/linux-4.1.16/

sudo cp ./.config /boot/config-4.1.16

使用dracut生成該核心的啟動檔案:

sudo

dracut--

kver4.

1.16-

k/lib/modules/4.1

.16/--

kernel

-cmdline

root=uuid=

[啟動分割槽的uuid

]initramfs-4

.1.16

.img

重啟,選擇新的核心進入系統。

(該文由回憶寫成,所以沒有配圖,請諒解。)

編譯linux核心 centos7

1.獲取核心原始碼 以linux 3.10.89.tar.xz為例 2.原始碼的解壓縮與放置目錄 將壓縮檔案放到 root 然後在root執行 tar jxvf linux 3.10.89.tar.xz c usr src kernels sudo tar jxvf linux 3.10.89.ta...

centos7 核心公升級

centos官網提供的映象始終是3.10 版本,有時需要更高的核心版本,下面是公升級到最新版本的步驟 1 公升級核心需要使用 elrepo 的yum 源,首先我們匯入 elrepo 的 key rpm import 2 安裝 elrepo 源 rpm uvh 3 在yum的elrepo源中,main...

Centos 7 核心公升級

一 公升級至最新版本核心 1.公升級系統包,命令如下。yum update y 2.公升級核心,命令如下。rpm import rpm uvh yum enablerepo elrepo kernel install kernel ml devel kernel ml y mainline 此時,等...