Linux內(nèi)核編譯很簡(jiǎn)單,6步編譯一個(gè)自己的內(nèi)核
在前面文章中我們反復(fù)提到過Linux內(nèi)核,知道Linux內(nèi)核才是Linux操作系統(tǒng)最為核心的內(nèi)容。內(nèi)核實(shí)現(xiàn)了對(duì)硬件的管理,為應(yīng)用軟件提供了使用硬件的接口。
對(duì)于Linux開發(fā)人員而言,內(nèi)核的學(xué)習(xí)和開發(fā)才是終極目標(biāo)。因此我們今天先介紹一下內(nèi)核的編譯。
需要知道的是,Linux內(nèi)核的編譯和安裝并非想象的那么難,那么復(fù)雜,其實(shí)只需要幾條命令就可以搞定。
本文,我們將一步一步地介紹如何從源代碼編譯和安裝一個(gè)Linux內(nèi)核。需要注意的是本指導(dǎo)基于Ubuntu 18.04版本編譯安裝,其它發(fā)行版可能會(huì)有差異。
編譯一個(gè)Linux內(nèi)核
整個(gè)內(nèi)核編譯的過程非常簡(jiǎn)單,但是內(nèi)核編譯需要花費(fèi)比較長(zhǎng)的時(shí)間。這主要是因?yàn)閮?nèi)核的代碼非常多。當(dāng)然,如果你的計(jì)算機(jī)性能強(qiáng)勁,時(shí)間會(huì)短很多。另外需要注意的是,建議在虛擬機(jī)環(huán)境下編譯,這樣避免錯(cuò)誤導(dǎo)致系統(tǒng)問題。如果在虛擬機(jī)測(cè)試,建議系統(tǒng)分區(qū)和內(nèi)核源代碼分區(qū)的大小大于20GB。
Step 1: 下載源代碼
1. 進(jìn)入Linux 內(nèi)核的官網(wǎng),下載最新版本,或者其它版本的內(nèi)核代碼。這里是源代碼的壓縮包。
2. 假設(shè)我們現(xiàn)在在一個(gè)Linux操作系統(tǒng)中,在命令行輸入如下命令就可以下載內(nèi)核了。
- wget 鏈接(由于鏈接會(huì)被認(rèn)為是廣告,本文省略鏈接,請(qǐng)自行復(fù)制)
在下載的過程中可以看到下載進(jìn)度,下載完成后信息大致如下所示。
Step 2: 解壓源代碼
壓縮包下載完成后,可以通過tar命令解壓。
- tar xvf linux-5.9.6.tar.xz
在解壓的時(shí)候可以看到文件列表,這個(gè)會(huì)很多,可能需要等一會(huì)兒。
Step 3: 安裝需要的軟件包
安裝編譯工具以及其它一下依賴的軟件包,在Ubuntu 18.04環(huán)境下執(zhí)行如下命令。
- sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
如果一切順利,大概安裝輸出信息如下所示。
Step 4: 配置內(nèi)核代碼
在編譯內(nèi)核之前,我們可以對(duì)內(nèi)核源代碼進(jìn)行配置。配置的目的主要是確定哪些模塊會(huì)編譯到內(nèi)核當(dāng)中。
1. 進(jìn)入源代碼目錄
- cd linux-5.9.6
2. 從當(dāng)前機(jī)器的啟動(dòng)目錄拷貝配置信息到源代碼目錄。這步操作的意思是我們編譯內(nèi)核的配置采用用當(dāng)前環(huán)境一致的配置。
- cp -v /boot/config-$(uname -r) .config
3. 可以通過如下命令啟動(dòng)配置界面
- make menuconfig
該命令會(huì)運(yùn)行一些腳本,然后打開一個(gè)配置界面
4. 下面是打開的配置界面。可以看出里面包含所有的內(nèi)核組件,包括文件系統(tǒng),網(wǎng)絡(luò),IO棧,虛擬化和設(shè)備驅(qū)動(dòng)等等。如果你不熟悉,可以不做任何修改。
Step 5: 編譯內(nèi)核
1. 通過如下命令就可以編譯內(nèi)核了
- make -j 10
上面參數(shù)是并發(fā)數(shù)量,通常可以是CPU的2倍。
2. 安裝模塊
- sudo make modules_install
3. 安裝內(nèi)核
- sudo make install
安裝完成后會(huì)有如下提示信息。
Step 6: 重啟,驗(yàn)證版本
當(dāng)上述步驟都沒有出錯(cuò)的情況下,我們重啟一下計(jì)算機(jī),然后運(yùn)行如下命令。
- uname -mrs
此時(shí)就可以看到內(nèi)核版本已經(jīng)是我們編譯的版本了。
結(jié)論
通過上面幾步,我們可以很簡(jiǎn)單的編譯一個(gè)內(nèi)核。如果后面開發(fā)內(nèi)核模塊,也是要基于內(nèi)核代碼樹的,因此這個(gè)是內(nèi)核開發(fā)的基礎(chǔ)。
可能遇到的問題
編譯內(nèi)核的時(shí)候可能會(huì)遇到這個(gè)問題:
沒有規(guī)則可制作目標(biāo)
debian/certs/debian-uefi-certs.pem,由certs/x509_certificate_list需求停止
在要編譯的內(nèi)核目錄下編輯一下配置文件即可。簡(jiǎn)單的方式是執(zhí)行如下命令
- vim .config
然后找到
CONFIG_SYSTEM_TRUSTED_KEYS,將其設(shè)置為空,也就是下面這個(gè)樣子。
- CONFIG_SYSTEM_TRUSTED_KEYS=””