如何編譯和更換Linux系統核心
step0 — 完成編譯和安裝Linux需要的基本條件
核心原始碼
從即可下載程式碼,注意你需要下載的是完整的原始碼包(點選
tarball
即可下載),而不是patch或change log之類。編譯需要的軟體
編譯kernel需要一些基本的develop工具軟體,比如make和編譯器,當然還有其他一些重要的工具,Debian系列的系統可以用如下命令安裝:
apt-get install build-essential kernel-package libncurses5-dev
step1 — 解壓縮原始碼包
原始碼包下載完成以後,需要進行解壓縮:
例如我下載的3.16.48版本核心原始碼包,檔名是linux-3.16.48.tar.xz
root@promote:/home/zy# ls -l
total 177364
-rwx------ 1 zy zy 81032280 Oct 2 21:50 linux-3.16.48.tar.xz
這裡注意一個大家慣用的慣例,就是把Linux核心的原始碼包放在/usr/src/目錄下,這一步不是必須的,但是個人認為放在這個目錄下,而不是任何使用者的家目錄下,如果你有多個核心的話,會比較清晰。
使用如下命令解壓縮:
tar -xvf linux-3.16.48.tar.xz
解壓縮完成以後,
root@promote:/usr/src# pwd
/usr/src
root@promote :/usr/src# ls -l
total 79140
drwxrwxr-x 24 root root 4096 Oct 3 01:36 linux-3.16.48
-rwx------ 1 root root 81032280 Oct 3 00:00 linux-3.16.48.tar.xz
setp2 — 編譯之前一些必要的清理
首先,清理以前編譯時留下的臨時檔案,如果是剛剛解開的包,不需要執行這步.否則一定要執行
make mrproper
網上很多教程上說把現在使用的核心的config拷貝過來參考,據實驗,是不需要的,ubuntu還有 debian會自動做這步. 不過這條命令倒是可以學習一下,當然你可以將以前的配置拷貝過來
cp /boot/config-uname -r
./.config
setp3 — 開始配置核心選項
配置核心主要是進行一些軟體硬體相關的設定,以進行核心支援功能及硬體的選擇,如果你沒有特殊需求,可以保持預設設定,如果需要進行特殊設定,則需要仔細核對。有如下四種方式進行核心選項的配置:
命令
make config
這是一種歷史悠久的配置方式,執行後會逐條列出支援配置的選項,可以選擇是否編譯進入核心或者採用模組的形式編譯,現在Linux支援的功能及硬體眾多,如果你用這種方式進行逐條配置,實在是一項非常耗時的工作。命令
make menuconfig
一個基於curses的圖形化的配置介面,可以直接選擇需要的專案進行更改。命令
make xcofig
基於QT的圖形化配置介面。命令
make gconfig
基於GTK的圖形化配置介面。
setp4 — 執行編譯
配置完成後,可以開始編譯,正常情況下按順序執行以下命令即可:
- make bzImage
- make modules
- make modules_install
- make install
如果沒有什麼特殊情況,按順序執行以上命令之後,就可以重啟了,我們這裡是基於Grub啟動的Linux,來看下啟動時的介面:
選擇第二項:
這裡我嘗試編譯安裝了兩個核心,一個是3.16.48版本,一個是4.13.4版本,老的核心是3.16.0版本,可以看到grub裡已經有了可選擇的我們編譯安裝完成的核心。選擇第一項即可:
root@promote:/home/zy# uname -r
4.13.4
新的核心已經更換成功了。
附錄
step4中編譯核心時,執行的幾個命令簡單說明:
make bzImage — 編譯基本的核心(make menuconfig這一步中選*的部分),並製成壓縮映象
make moudles — 編譯核心模組(make menuconfig這一步選擇m的部分)
make modules_install — 將上一步編譯好的模組(.ko檔案)拷貝到/lib/modules/liunx-x.xx.x資料夾,核心啟動時需要載入的模組,會在這個路徑下尋找。
make install — 編譯出來的壓縮核心映象拷貝到/boot/資料夾下,並且修改/boot/grub/grub.cfg這個grub配置檔案,才能出現啟動時我們看到的選項。
make install命令在grub.cfg檔案中增加了一個submenu段,裡面註明了新核心的名字,啟動映象的位置,根目錄所在磁碟的uuid等資訊,重要的資訊如下圖紅線所示: