一次簡單的內核編譯(一)

一、編譯環境

  1、準備一臺測試機,放置兩塊硬盤

  2、安裝"Development Tools"和"Server Platform Development"編譯環境

  3、內核下載地址:https://www.kernel.org(本人使用的是3.10版本)

  4、下載busybox:http://www.busybox.net

二、編譯

 1、分區,將新添加的硬盤進行分區,結果如下:

  1.png

 2、在/mnt目錄下創建boot,sysroot目錄,格式化新磁盤分區,分別掛載至/mnt/boot,/mnt/sysroot

  2.png

 

 3、以/mnt/boot目錄為新系統的/boot目錄,/mnt/sysroot/為新系統的根目錄,安裝grub到/mnt/boot目錄,安裝方式如下:

  3.png

 

 4、解壓內核源文件至/usr/src,并創建軟連接為linux  1.png

 5、使用make allnoconfig 清除內核所有默認配置:

  5.png

  

 6、運行make menuconfig,在出現的菜單中選擇要使用的內核功能;

  (1)選擇內核支持64位操作系統,支持裝載模塊

   2.png

    

  (2)選擇內核支持模塊卸載

6.png

   

 (3)選擇CPU型號 8.png

 (4)保存退出

 9.png

 (5)運行make bzImage進行編譯 

  10.png

  11.png

  (6)復制編譯后的內核文件(bzImage)到/mnt/boot目錄下

  12.png

  

  (7)切換到/mnt/boot/grub/目錄中,創建grub.conf文件,內容如下:

    13.png

 

 7、新建虛擬機,以宿主機的磁盤(/dev/sdb)為系統盤

    在選擇磁盤時使用現有磁盤,如下

   15.png

   16.png

 8、虛擬創建完成,在宿主機運行sync,將內存信息同步到磁盤

   17.png

 

 9、掛起宿主機,啟動新建的虛擬機:

   啟動界面

    18.png

   啟動完成后提示內恐慌,沒有文件系統

    3.png

 10、給內核添加文件系統,使其能夠識別文件系統

  (1)添加支持的文件系統類型   4.png

  

 (2)選擇支持的塊設備 5.png 

(3)選擇磁盤驅動程序

6.png

9.png

(4)選擇磁盤接口類型

8.png

   

 (4)保存選擇的配置信息,再次運行make bzImage進行編譯

 (5)將新的內核文件bzImage復制到/mnt/boot/覆蓋原有的bzImage

   7.png

 (6)運行sync,同步數據信息

   17.png

 (7)掛起宿主機,運行新建的虛擬主機,結果如下

  10.png

   

 11、添加init程序

   (1)在/mnt/sysroot/目錄中創建系統所需要的目錄   11.png

     

 (2)將bash以及bash依賴的庫文件復制到/mnt/sysroot對應的目錄中,使用腳本一次簡單的內核編譯(一)bincp.txt(馬哥提供的腳本)復制,上傳到宿主機,修改后綴名為bincp.sh,添加執行權限即可使用;

   12.png

(3)查看復制的結果:

    13.png

 

   (4)切換到/mnt/sysroot/bin/目錄,給bash做軟連接為sh

    14.png

 

   (5)編輯/mnt/boot/grub/grub.conf,指定init程序是/bin/sh

    15.png

 

   (6)切換到/usr/src/linux,運行make   menuconfig,給內核添加可以支持bash的程序  16.png

 (7)添加完成后保存退出,運行 make bzImage進行編譯,然后將編譯后的結果復制到/mnt/boot/目錄中,覆蓋原有的bzImage文件

  19.png

  

 (8)運行sync,同步數據

 (9)同步完數據后,掛起宿主機,啟動新建的虛擬機;啟動結果如下:

   21.png    

 12、雖然內核已經可以正常啟動,但是沒有鍵盤和鼠標驅動,無法使用鍵盤鼠標,接下來給內核添加鼠標鍵盤驅動

   (1)添加鍵盤

    22.png   23.png

   

 (2)添加鼠標    24.png

 (3)添加USB驅動   25.png

(4)添加以上設備驅動后,保存退出,運行make  menuconfig,將生成的bzImage復制到/mnt/boot/,覆蓋原有的bzImage

  26.png

(5)運行sync同步數據

(6)同步完數據后,掛起宿主機,運行新建的虛擬機,結果如下: 27.png

 13、添加常用的bash命令,使用bincp.sh腳本添加;

    28.png

    

 14、添加完bash命令后,運行sync,進行數據同步,同步完成后,掛起宿主機,啟動新建的虛擬機,運行添加的bash命令

   29.png

 15、編寫init腳本,替換/bin/sh,init腳本內容如下:

    30.png  

    添加執行權限

   31.png

 16、編輯/mnt/boot/grub/grub.conf,修改init程序位置,使用bincp.sh移植mount命令到/mnt/sysroot對應的目錄中

   (1)編輯/mnt/boot/grub/grub.conf,修改內容如下:

       32.png   

  

    (2)移植mount命令

     33.png

   (3)運行sync同步數據,同步完成后掛起宿主機,運行新建的測試機,結果如下:  34.png   

  17、給內核添加網絡功能

    (1)cd  /usr/src/linux目錄,運行 make  menuconfig,選取網絡驅動跟網絡功能    35.png  

 (2)選取網絡驅動 36.png

 (3)保存退出,運行make bzImage進行編譯,將生成的bzImage復制到/mnt/boot/,覆蓋原有的bzImage內核

   37.png

 

 (4)復制相關的ip命令到/mnt/sysroot對應目錄中

   38.png

 (5)運行sync同步數據,掛起宿主機,啟動新建的測試機;結果如下

   39.png

  40.png

  41.png

  42.png

    

   

原創文章,作者:馬行空,如若轉載,請注明出處:http://www.www58058.com/4792

(0)
馬行空馬行空
上一篇 2015-06-01
下一篇 2015-06-02

相關推薦

  • Linux下/proc目錄詳解

    Linux下/proc目錄詳解 proc目錄總的概述 proc下有關進程的目錄概述 proc下針對Linux系統相關的參數目錄概述 /proc目錄總的概述 1.首先,我們可以使用ll命令查看下/proc目錄,如下 [root@centos6 ~]# ls -l /proc total 0 dr-xr-xr-x. 8 root root 0 May 19 04…

    Linux干貨 2017-05-20
  • 內核編譯流程和自動化安裝

    內核編譯         在特定的情況我們機器上面有些硬件特性需要利用起來,但是我們現成的這個內核沒有開啟這個功能,那就需要重新編譯,把這個功能模塊加進來,或者打到vmlinux中的核心文件里面。比如ntfs功能,默認系統沒有啟用此功能,但是系統是帶這個功能的,編譯的時候時候可以…

    Linux干貨 2016-09-18
  • N24_輝 學習宣言

    我志愿加入馬幫的大家庭。 在此,我堅信有志者事竟成,同時,機會總是留給有準備的人的。 既來之,則安之。我的目標是能在規定的時間內結業,正如馬哥所說:完成比完美更重要! 無論如何,也要完成!fighting!?。?/p>

    Linux干貨 2016-10-24
  • GRUB加密、修復和破解密碼實戰指南

    GRUB加密、修復和破解密碼實戰指南 GRUB(Boot Loader) 從系統啟動流程可以得知,在BIOS讀取相關信息之后,接下來是去第一個可以啟動的設備當中的MBR中讀取Boot Loader信息,Boot Loader提供具有菜單功能、直接加載內核信息,以及相關的控制權轉交功能。所以說系統啟動必須要有Boot Loader,然后才能去加載內核。 Boo…

    Linux干貨 2016-09-19
  • Linux基礎指令(2)

    4.文件的元數據信息有哪些,分別表示什么含義,如何查看?如何修改文件的時間戳信息?  元數據定義:      數據(Metadata),又稱中介數據、中繼數據,為描述 數據的數據(data about data),主要是描述數據屬性(property)的信息,用來支持如…

    Linux干貨 2016-11-09
  • shell腳本的練習

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態? 在線的主機使用綠色顯示? 不在線的主機使用紅色顯示 #!/bin/bash for i in {1..254};do { ip=…

    2017-09-17

評論列表(2條)

  • stanley
    stanley 2015-06-01 19:21

    小伙伴的圖真是專業哇~

    • 馬行空
      馬行空 2015-06-01 23:07

      @stanley謝謝,剛剛開始寫,寫的不怎么好,還得向您學習 :smile:

欧美性久久久久