1. 程式人生 > >如何編譯和更換Linux系統核心

如何編譯和更換Linux系統核心

step0 — 完成編譯和安裝Linux需要的基本條件

  • 核心原始碼

    從即可下載程式碼,注意你需要下載的是完整的原始碼包(點選tarball即可下載),而不是patch或change log之類。

    img

  • 編譯需要的軟體

    編譯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的圖形化的配置介面,可以直接選擇需要的專案進行更改。

    img

  • 命令make xcofig基於QT的圖形化配置介面。

  • 命令make gconfig基於GTK的圖形化配置介面。

setp4 — 執行編譯

配置完成後,可以開始編譯,正常情況下按順序執行以下命令即可:

  1. make bzImage
  2. make modules
  3. make modules_install
  4. make install

如果沒有什麼特殊情況,按順序執行以上命令之後,就可以重啟了,我們這裡是基於Grub啟動的Linux,來看下啟動時的介面:

img

選擇第二項:

img

這裡我嘗試編譯安裝了兩個核心,一個是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等資訊,重要的資訊如下圖紅線所示:

    img