作業系統之--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重啟後如下圖所示檢視核心版本:
如果看到版本號和之前自帶的核心版本號高,那麼就說明核心安裝成功了!