初識linux內核編譯

編譯內核前提:

       1、準備開發環境。

       2、獲取目標主機上硬件設備的相關信息。

       3、獲取目標主機系統功能的相關信息,例如要啟用的文件系統。

       4、獲取內核源代碼包:www.kernel.org

實驗環境:基于CentOS7.2進行

如何準備開發環境:

       安裝開發包組

              CentOS6:安裝Developmet Tools、Server Platform Development(服務器平臺開發)

              CentOS7:安裝Developmet Tools、Server Platform Development(服務器平臺開發)

              確?!眓curses”已安裝

如何獲取目標主機上硬件相關信息

       CPU型號:      

~]#/cat /proc/cpuinfo
~]#lscpu
~]#yum install -y x86info
~]#x86info -a

blob.png

       PCI設備:

              顯卡、網卡、鍵盤、鼠標等

~]# lspci

                     -v

                     -vv

~]# lsusb
~]# lsblk

              了解全部硬件信息:   

]# hal-device

內核編譯過程

       1、獲取較高版本的內核。如下載linux-3.10.67

       2、解壓內核壓縮包至/usr/src目錄

       3、當項目需要統一的名稱進行管理時,將帶有不同版本號的項目鏈接至統一名稱是一種比較好的解決方式。相較于直接修改不同版本號的項目為統一名稱,軟連接的方式能夠支持回滾。

       4、開始編譯內核,使用make命令。在/usr/src目錄下

~]# make menuconfig #配置內核選項。若提示錯誤,可能需要安裝ncurses-devel包。
    安裝之后在執行。
~]# make         #編譯內核,可是有-j指定編譯線程數量
~]# make modules_intsall #安裝內核模塊
~]# make install     #安裝內

              之后重啟系統,選擇使用新內核。

注:在遠程連接進行耗時較長的操作時,為避免因網絡異常導致連接中斷,從而影響正常操作,在進行操作時,應當進入scren操作

  1)在/boot目錄,與名為config-Version-Release的文件,在編譯內核時,刻以此文件為模板進行編譯。如:config-3.10.0-327.el7.x86_64

cp /boot/config-3.10.0-327.el7.x86_64 /usr/src/linux/.config

blob.png

 2)配置內核選項。

      a、支持“更新“配置,支持在已有的.config文件基礎之上進行”修改“配置。

        (1)make config:基于命令行以遍歷的方式去配置內核中可配置的每個選項

        (2)make menuconfig:基于ncurses-delve的文件配置窗口。

        (3)make gconfig:基于GTK開發環境的窗口界面,需安裝“桌面平臺開發“

        (4)make xconfig:基于QT開發環境的窗口界面

       b、支持“全新配置“模式進行配置:

        (1)make defconfig:基于內核為目標平臺提供的“默認“配置為模板進行配置,不再讀取.config文件

        (2)make allnoconfig:所有選項均為“no”

在此使用:make menuconfig

2.1)在Processor type and features選項中的Processor family選項菜單中可以選擇當前的cpu類型

blob.png

blob.png

選擇對應的CPU類型即可

blob.png

2.2)在General setup中的Local version菜單可以配置grub菜單中內核現實的信息

blob.png

blob.png

當然,一般添加的是系統版本信息,比如RHEL7,簡寫為-el7。第一次編譯的話寫為-1.el67。

blob.png

2.3

blob.png

3) 編譯      

       3.1)支持多線程編譯:make –j #

       3.2)僅編譯內核中的一部分代碼

             a)只編譯某子目錄中的相關代碼

                       切換至內核源碼樹下:cd /usr/src/linux

                       make /path/to/dir

             b)至編譯特定的模塊

                        cd /usr/src/linux

                        make /path/to/dir/file.ko  #在該目錄下可能只存在file文件,但是在配置時要些微file.ko,若僅編譯一個模塊,需要將該模塊手動移動到 /lib/modules/Version-Release/kernel/對應的目錄下

            c)交叉編譯

                       編譯的目標平臺與當前編譯操作的平臺不同。

                       #make ARCH=arch_name

                       如何獲取特定目標平臺的使用幫助

                       #make ARCH=arch_name help

如何在執行過編譯操作的內核源碼樹上做重新編譯:

       事先清理操作:

              make clean:清理編譯生成的絕大多數文件,但會保留.config和外部編譯所需要的文件

              make mrproper:清理編譯生成的所有文件,包括配置生成的.config文件及某些配置文件

              make distclean:相當于mrproper之外,再清理各種patches及編輯器備份文件。

              在做make mrproper或make distclean之前,應該將.config文件備份

指定默認的內核版本:vim /etc/default/grub

原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/46155

(0)
M20-1鐘明波M20-1鐘明波
上一篇 2016-09-13
下一篇 2016-09-13

相關推薦

  • 邏輯卷管理—LVM

    邏輯卷管理—LVM   LVM:Logical  Volume  Manager        使用軟件方式來組織一個或多個底層硬件設備為一個抽象的邏輯設備。 1、查看分區情況: 2、創建分區:(更改分區類型為8e:Linux LVM) 3、創建分區成功: 5、創建物理…

    Linux干貨 2016-09-01
  • liunx學習第一天知識點-基礎知識

    一 計算機組成 1. 馮·諾依曼體系:     1946年數學家馮·諾依曼于提出計算機由五大部分組成:運算器、控制器、存儲器、輸入設備、輸出設備 2. 摩爾定律:     戈登·摩爾于1965年提出來當價格不變時,集成電路上可容納的元器件的數目,約每隔18-24個月便會增加一倍,…

    Linux干貨 2016-07-27
  • 操作系統圖形界面發展史(1981-2009)

    注意,本文這羅列了從1981年以來有重大意義的操作系統的圖形界面。 首先,先介紹兩個網站: http://www.guidebookgallery.org/ 如果你比較關注圖形化UI的設計, 可以上這個網站上看看。 http://toastytech.com/guis/index.html 這是一個操作系統圖形界面收集的網站,上面幾科包括…

    Linux干貨 2016-05-17
  • httpd-2.2和httpd-2.4區別 、請求方法和響應狀態碼、虛擬主機、訪問控制、持久鏈接

    第十周
    The Apache HTTP Server is a powerful, efficient, and extensible web server.
    2018/2/4 16:33

    2018-02-04
  • 磁盤分區和腳本練習

    1、創建一個10G分區,并格式為ext4文件系統 (1)要求其block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl; mke2fs -t ext4 -b 2048 -m 2 -L MYDATA /dev/sdb5 tune2fs -o acl /dev/sdb5 (2)掛載至/etc/mydate目錄,要求掛載時禁止自動運…

    Linux干貨 2017-08-21
欧美性久久久久