虛擬機ubuntu-編譯屬於本身的linux內核

1、實驗環境linux

  Vmware15.5, Ubuntu18.04, linux-5.6.14內核(以這個環境爲例)shell

2、準備工做ubuntu

  1. 安裝好虛擬機,安裝Ubuntu系統。(本次實驗用的是虛擬機沒有用雙系統,由於實驗中有一要求是實現文件交互,因此採用虛擬機,稍後也會下載相應工具)vim

    (另外,若是電腦配置夠的話,能夠將虛擬機配置高端一點,由於後面 make 這個步驟很花時間。)app

  2.  下載linux-5.6.14內核(https://www.kernel.org/)(linux內核官網,下載壓縮包tarball便可)工具

              

 

  3.  如今咱們就須要下載VMware Tools,一個能夠將文件從主機拖入客戶機的工具。(由於目前虛擬機掛起狀態,因此它不可選)flex

    

 

  4.  VMware Tools下載完成以後,會有一個CD圖標。而後咱們進入所在路徑 /media,能夠將壓縮包拖入桌面,進行解壓。es5

    解壓命令:sudo tar -zxvf VMware Tools-...... (直接用Tab鍵補全文件名稱以避免出錯)
spa

         

 

    解壓完成後,進入/vmware-tools-distrib路徑,後執行命令 sudo ./vmware-install.pl 開始安裝,一路回車。線程

              

    由於我已經安裝過,就再也不截圖演示。若是安裝出現問題,能夠自行百度。

    安裝完成後,重啓虛擬機。

  5. 如今咱們能夠將下載的linux-5.6.14壓縮包拖入虛擬機。若不能拖入則說明VMware Tools安裝出問題。

    拖入後,執行命令 sudo mv linux-5.6.14.tar.xz /usr/src 而後進入/usr/src路徑,執行命令 sudo tar -xvf linux-5.6.14.tar.xz

    就可看到生成linux-5.6.14文件夾。

               

    到此咱們的準備工做就完成了。

3、實驗過程

  (實驗過程我以root用戶進行,經過命令 su 就可進入 root用戶。若是報錯有多是沒有設置密碼,輸入 sudo passwd,設置密碼便可)

  咱們先來看一下默認的內核。在終端輸入 uname -a。(這個是重裝虛擬機以前的圖,因此虛擬機、用戶名稱不同。無傷大雅)

  

 

 

   下來咱們開始編譯本身的內核:

  1. cd linux-5.6.14,進入該路徑。咱們經過 make 來編譯內核,因此咱們須要環境和依賴。

    1. apt install gcc

    2. apt install make

    3. apt install gcc make libncurses5-dev openssl libssl-dev

    4. apt install pkg-config

    5. apt install bison

    6. apt install flex

    7. apt install libelf-dev

   安裝完成咱們就能夠進行下一步工做。執行命令 make nconfig ,進入下面界面(若是make nconfig過程當中報錯,按照錯誤提示安裝相應依賴便可)。

       

   咱們將內核名稱自行命名。進入 General setup ,修改 Local version。修改完成後保存(此處會保存爲.config),後退出。

           

   在此步驟作一點說明,此處咱們僅修改了名稱,別的選項都是默認。由於選項設置麻煩,因此不作說明,但這會致使下一步

   make的時候比較費時間。能夠自行在網上找簡潔的 .config 文件,將文件拷到虛擬機便可。

  2. 好了, .config 文件咱們已經完成了。下一步就開始 make。執行命令 make -j4 (4個線程跑,會快不少。-j4 是可選項,取決於

   你的虛擬機配置)。這一步驟須要 3h 左右(我第一次跑三小時,後來4線程跑一個多小時。這個過程會有 warning 內存過大,

   這個不用管,注意warning信息,若是須要能夠暫停更改環境配置)。

  3. 通過漫長的等待,make 這步終於完成了。而後執行命令 make modules_install

  4. 執行命令 make install。完成後重啓虛擬機。

        

 

 

  好啦。到此內核編譯就完成了。咱們開始內核引導,必需要看到屬於本身的內核~

 

  重啓事後,終端執行 cd /boot/ 。System.map - * 就是要用的東西。

  執行命令  sudo update initramfs -c -k 5.6.1418130500337-ssc (這裏用你的文件名稱替換哦!)

 

       

 

 

   完成後執行命令 sudo update-grub 。會生成一個.img文件,這是由內核源碼生成的內核鏡像。

  咱們須要修改grub,執行命令 cd /boot/grub/ ,修改 grub.cfg文件。執行命令 sudo vim grub.cfg

  

       

     到這裏就已經修改完成了。重啓虛擬機。

  再次進入執行命令 uname -a , 即可看到本身的內核。

  

 

4、總結與心得

    這裏說一下對內核的一些瞭解。ubuntu = kernel + users application + shell,是一個介於通常程序與硬件之間的東西。

    好比c語言中的 printf(), 就是 printf() -> c庫中的printf() -> c庫中的write() -> kernel中的 write()。

    下一篇是打算是關於系統調用,這也是實驗內容之一。

    實驗的完成也是磕磕絆絆,全部的失敗都歸結於錯誤的開始。由於這是幾天前完成的實驗,我沒有保留

  完整的實驗現場,因此中間內容可能展現不到位,不過若是有錯歡迎評論指出,初學者的路還很長。

相關文章
相關標籤/搜索