1. 程式人生 > >作業系統之--linux核心編譯步驟詳解

作業系統之--linux核心編譯步驟詳解

ORIGIN

作為自由軟體,linux 核心版本不斷更新,新核心會修訂舊核心的 bug,並增加若干新特性,如支援更多的硬體、具備更好的系統管理能力、執行速度更快、更穩定等。使用者若想要使用這些新特性,或希望根據自身系統需求定製一個更高效、更穩定的核心,就需要重新編譯核心。下面以 linux 初學者喜歡使用的 ubuntu 系統為例,介紹核心編譯步驟。

操作環境

硬體:macbook pro retina 2015年初期
Ubuntu 64 位:ubuntu-16.04-desktop-amd64.iso,待編譯的新核心是 linux-4.10.10.tar.xz。
由於在核心編譯過程中會生成較多的臨時檔案,如果磁碟空間預留太小,會出現磁碟空間不足的錯誤而導致核心編譯失敗;記憶體太小會影響編譯速度,一般核心編譯時間是 0.5h~1h。

下載核心原始碼

Linux核心原始碼是完全公開的,很多網站都有下載資源,這裡使用linux的官方網站下載:http://www.kernel.org ,在這裡可以下載所有核心版本:
這裡寫圖片描述

解壓縮核心原始碼檔案

首先用sudo切換到root使用者,將下載的新核心壓縮檔案複製到/usr/src下面:

sudo cp linux-4.10.10.tar.xz /usr/src 

然後進入/usr/src子目錄中,分兩步解壓縮:

sudo xz -d linux-4.10.10.tar.xz
sudo tar -xvf linux-4.10.10.tar

本機編譯好後的/usr/src目錄情況:
這裡寫圖片描述

清除殘留的.config與.o檔案

我看的教程中說到要清除殘留的這些配置檔案,原因是編譯出錯或不是第一次編譯都需要執行此命令清理編譯歷史。
先用這個命令進入解壓好的原始碼包裡:

cd linux-4.10.10

然後使用的清楚殘留配置檔案命令是:

make mrproper

這裡可能會提醒安裝ncurses安裝包,在ubuntu中改庫的名字是libncurses5-dev,所以安裝命令是:

apt-get install libncurses5-dev

當然建議都執行一下這一步工序

配置核心

執行命令:

make menuconfig

執行該命令過程中可能會出現如下錯誤資訊:
這裡寫圖片描述


這是因為系統中缺少ncursesdevel套件,安裝此套件即可。安裝可執行此命令:

sudo apt-get install libncurses5-dev

之後再執行make menuconfig命令就正常了。
接下來會顯示配置有關的一個對話方塊,使用者對於一個選項可以設定Y或m或n,其中Y表示將相應特性的支援或裝置程式編譯進核心:m表示將相應的特性的支援或裝置驅動程式編譯成可載入模組,需要時使用者可以新增。游標移動用方向鍵即可完成,其他相關解釋在介面上方可以看到.

一般採用預設值即可,但要檢查裝置驅動配置情況:
這裡寫圖片描述
進入scsi裝置配置介面,如下圖所示,下面幾項要設定為’*’:
這裡寫圖片描述
這裡寫圖片描述
回到上一個介面,設定Fushion MPT device support,設定為’*’:
這裡寫圖片描述
這裡寫圖片描述
直接選擇exit退出並按提示儲存配置檔案。

編譯核心,生成啟動映像檔案

核心配置ok後編譯核心,生成啟動映像檔案,執行命令:

sudo make bzImage

結果可能出現錯誤:
這裡寫圖片描述
很明顯是因為沒有安裝openssl,要先安裝openssl:

sudo apt-get install libssl-dev

openssl玩成安裝後再執行make bzImage 即可,需要個把小時,編譯完成後將在/usrsrclinux-4.10.10/arch/x86/boot目錄下生成一個名為bzImage的檔案。
這一步筆者用了大約20分鐘:
這裡寫圖片描述
這裡寫圖片描述
這一步執行完後大約佔了10g的空間。

編譯模組

執行命令make modules 即可進行編譯:
這裡寫圖片描述
這裡寫圖片描述
可以看到這一步又花費了10G左右空間。
筆者在這一步大約花了1小時10分鐘,期間吃了飯順便把昨晚看的電影補完了。

安裝核心

首先安裝模組:

make modules_install

這裡寫圖片描述
根據我參考的教程,下一步建立要載入 ramdisk 的映像檔案:如果你的系統是跑在虛擬機器裡,那麼這一步一
定需要:

 mkinitramfs 4.10.10 -o /boot/initrd-4.10.10.img

其中 4.4.19 是/lib/modules 下的目錄名稱,即核心版本號;initrd-4.4.19.img 為所生成的
核心映象檔名,可根據自己需要進行修改,上面命令也可以寫成:

mkinitramfs -o /boot/initrd-4.10.10.img -v 4.10.10

這裡寫圖片描述
最後,用make install 安裝核心即可。
這裡寫圖片描述

配置grub載入程式

只需執行命令update-grub2即 可,該命令會自動修改grub。
這裡寫圖片描述

重啟後檢視版本號

reboot重啟後如下圖所示檢視核心版本:
這裡寫圖片描述
如果看到版本號和之前自帶的核心版本號高,那麼就說明核心安裝成功了!