Linux內核編譯過程詳解

前言

Linux內核是Linux操作系統的核心,也是整個Linux功能體現的核心,就如同發動機在汽車中的重要性。內核主要功能包括進程管理、內存管理、文件管理、設備管理、網絡管理等。Linux內核是單內核設計,但卻采用了微內核的模塊化設計,支持內核線程以及動態裝載內核模塊的能力。

Linux作為一個自由軟件,在廣大愛好者的支持下,內核版本不斷更新。新的內核修訂了舊內核的bug,并增加了許多新的特性。如果用戶想要使用這些新特性,或想根據自己的系統定制一個更高效,更穩定的內核,就需要手動編譯Linux內核。那么如何編譯內核呢?本文將講解Linux內核編譯的詳細程。

內核編譯之內核獲取

編譯內核的前提是需要有新內核的源碼包,獲取源碼包的渠道有很多,這里就不詳細介紹了,建議直接去官方網站(www.kernel.org)下載。我這里準備的是3.10.10版本的源碼包,盡量不要直接編譯最新版本的內核,可能會造成不兼容等問題。

1.jpg

內核編譯之解壓源碼包

編譯內核時,一般把源碼解壓到/usr/src目錄下,解壓完成后會在該目錄下生成一個與源碼包版本號一致的目錄,為了方便起見,我們可將它做一個鏈接,鏈接為linux目錄。

2.jpg

內核編譯之配置內核

編譯內核首先需要安裝開發環境(Development Tools和Server Platform Development),配置內核之前可以查看當前系統的設備信息,了解系統詳細配置。

查看CPU信息:
cat /proc/cpuinfo
x86info             #此工具需手動安裝
lscpu
查看PCI:
lspci               #可用選項-v查看詳細信息
查看USB:
lsusb               #可用選項-v查看詳細信息
查看塊設備:
lsblk

配置內核可選用多種方法

make config           #遍歷選擇編譯內核功能
make allyesconfig     #啟用內核全部功能
make allnoconfig      #內核功能選項全部為否
make menuconfig       #開啟文本菜單選項,對窗口有限制,盡量調大窗口,否則會出錯
                      #使用此命令需安裝gcc和ncurses-devel
make gconfig          #依賴GNome桌面環境及GNome的圖形開發環境,gtk2
make kconfig          #依賴KDE桌面環境及KDE的圖形開發環境,qt

內核功能選項

[*]                   #編譯進內核本體
[M]                   #編譯成內核模塊
[ ]                   #不選擇使用

使用make menuconfig開啟菜單選項,手動選擇內核功能

3.jpg    

4.jpg 

配置完成后,配置信息會存儲于名為.config的隱藏文件,如果想方便配置,可復制/boot/config文件覆蓋.config文件,直接修改即可。

5.jpg

內核編譯之編譯安裝

編譯時如果是遠程連接,一旦斷開連接,編譯就會出問題。所以我們可使用screen命令(需安裝),啟動多個窗口,即使連接中斷,編譯也不會終止。

screen                 #開啟窗口
Ctrl+A+D               #隱藏窗口
screen -ls             #查看運行的窗口
screen -r SCREEN_ID    #返回窗口

開始編譯

6.jpg

安裝模塊

7.jpg

安裝完成后在/lib/modules/目錄下會生成一個同內核版本好的目錄,目錄下便是新內核的模塊了

8.jpg

安裝內核

9.jpg

安裝完成后會在/boot目錄下生成幾個新內核的文件

10.jpg

查看grub.conf配置文件,會發現新內核的信息已經寫入了

11.jpg

以新內核啟動

12.jpg

查看新內核版本

13.jpg

補充:

如果前面多次編譯過,在編譯開始之前可進行清理

 make clean       #清理編譯的文件,但保留配置文件
 make mrproper    #移除所有編譯生成的文件、配置文件和備份文件
 make distclean   #完全清理

如果想快速編譯,可進行如下操作

make -j *         #*為cup核心數

如果想將編譯生成的文件保存至別處,可進行如下操作

mkdir /path/to/somewhere               #創建存放目錄
cd /path/to/somewhere                  #進入目錄
./configure --ksource=/usr/src/linux   #指定源目錄

如何只編譯內核的部分代碼

只編譯某子目錄中的相關代碼:
cd /usr/src/linux
make  path/to/dir/
只編譯部分模塊:
make M=path/to/dir
只編譯一個模塊:
make path/to/dir/MOD_NAME.ko
將編譯生成的文件保存至別處:
make O=/path/to/somewhere

The end

好了,內核編譯的過程就是這樣了,其中麻煩的地方除了需要消耗大量時間,也就是配置內核菜單了(英文傷不起…),想詳細了解每個項目的意思請自行查資料。

以上僅為個人總結,如有錯漏,大神勿噴~~~

原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/2063

(0)
書生書生
上一篇 2015-03-31
下一篇 2015-04-01

相關推薦

  • 測試

    3、查詢file.txt以abc結尾的行grep "abc$" file.txt4、刪除file.txt文件中的空行grep -v '^$' file.txt > file.txtsed '/^$/d' file.txt > file.txt(覆蓋重定向文件變為空該文件為空,但是追加時正常成功?!?/p>

    Linux干貨 2016-06-12
  • 配置DNS服務

    DNS:Domain Name System:域名系統 DNS:Domain Name System:域名系統 域名和IP地址相互映射的一個分布式數據庫,使用戶使用域名更方便的訪問互聯網,不用去記更利于機器讀取的IP地址,域名解析由DNS服務器提供。 DNS服務器的類型: 主DNS服務器:管理和維護所負責解析的域內解析庫的服務器 從DNS服務器:從主服務器或…

    Linux干貨 2016-10-24
  • 軟硬鏈接區別及tr轉換命令

    軟硬鏈接的區別 (1)軟連接可以 跨文件系統 ,硬連接不可以 (2)關于 I節點的問題 。硬連接不管有多少個,都指向的是同一個I節點,會把 結點連接數增加,只要結點的連接數不是 0,文件就一直存在 ,不管你刪除的是源文件還是連接的文件。只         要有一個存在,文件就 存…

    Linux干貨 2016-08-08
  • bash的工作特性-命令執行狀態返回值、命令行展開

    bash的基礎特性:命令的執行狀態結果 命令執行的狀態結果:      bash通過狀態返回值來輸出此結果:           成功:0           失?。?-255 命令執行完成之后,其狀態返回值會保存于bash的特殊…

    Linux干貨 2016-08-22
  • 馬哥教育網絡班21期+第6周課程練習

    VIM基礎知識 常用模式: 編輯模式–>命令模式 輸入模式 末行模式:內置的命令行接口 模式轉換: 編輯模式–>輸入模式 i:在光標所在處前轉換為輸入模式; a:在光標所在后面轉入輸入模式; o:在當前光標所在行的下方打開一個新行,并轉為輸入模式; I:在當前光標所在行的行首輸入; A:在當前光標所在行的行尾輸入; O:在當前光標所在行的上方…

    Linux干貨 2016-08-15
  • Redhat的Linux產品版本AS/ES/WS的聯系與區別

    Redhat 有兩大Linux產品系列,其一是免費的Fedora Core系列主要用于桌面版本,提供了較多新特性的支持。另外一個產品系列是收費的Enterprise系列,這個系列分成:AS/ES/WS等分支,他 們都是redhat企業級Linux,簡稱為 RHEL AS 是超級服務器版(Advanced Server),他在標準Linux內核的基礎上,做了性…

    Linux干貨 2015-03-20

評論列表(3條)

  • stanley
    stanley 2015-04-01 13:28

    不錯,內容充實,格式優美,能迅速吸引眼球并能勾起讀者繼續的欲望

    • 書生
      書生 2015-04-01 20:35

      @stanley大神辛苦 每篇都一一審核修改

  • 壞喵嗚
    壞喵嗚 2015-04-03 17:27

    意義不大。如果gcc不滿足要求怎么辦

欧美性久久久久