初識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 15:58
下一篇 2016-09-13 16:49

相關推薦

  • 馬哥教育21期網絡班—第五周課程+練習

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; grep "^[[:space:]]\+" /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; grep "…

    Linux干貨 2016-07-29
  • 馬哥教育網絡班22期+第三周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。     [root@zabbix ~]# who|awk '{print $1}'|sort| uniq 2、取出最后登錄到當前系統的用戶的相關信息。 &nb…

    Linux干貨 2016-08-23
  • 一些鮮為人知的編程事實

    我的程序員經歷讓我明白了一些關于軟件開發的事情。下面是一些在編程中可能會讓人感到詫異的事情: 一個程序員用了大約只用了10%-20%的時間來編碼,而且大多數程序員,無論他的水平如何,其平均每天只有10-12行的代碼最終會進入最終的軟件產品中。這是因為,優秀的程序員會花費90%的時間來思考、調查、研究最佳的設計。而糟糕的程序員則會花費90%的時間來調試代碼,并…

    Linux干貨 2016-07-11
  • 用戶管理類命令

    2018-03-18

    Linux干貨 2018-03-18
  • rsyslog日志服務

    一、知識整理: 1、日志服務rsyslogd新特點:     多線程;     基于SSL/TLS/UDP/TCP/RELP網絡協議傳輸日志信息;     強大的過濾器,實現過濾日志信息中任何部分的內容;   &nbsp…

    Linux干貨 2016-10-24
  • find和grep命令練習

                                    find和grep命令練習 1、顯示當前系統上root,fedora,或user1用戶的默認shell; ~]# cat /etc/pa…

    Linux干貨 2016-10-23
欧美性久久久久