Linux核心裁剪——無模組支援

來源:互聯網
上載者:User
文章目錄
  • 2.1    Linux系統啟動過程
  • 2.2    initrd.img的作用
  • 2.3    grub.config檔案
  • 2.4    分析  
  • 4.1     Linux網路設定   
  • 4.2    Kernel Panic
  • 4.3    Putty下糾結的Ctrl + S
  • 4.4    SElinux延時
  • 4.5     Make localyesconfig用不了
  • 4.6    編譯速度過慢
Linux核心裁剪——無模組支援1       要求

1.1         完成無模組支援的Linux核心定製

1.2         產生的新核心在CentOS6.2虛擬機器中啟動成功,並可登陸進入系統

2       原理2.1    Linux系統啟動過程  BIOS-> MBR -> OS Loader -> Kernel -> initrd ->Application Manager -> Application

2.2    initrd.img的作用

Ø  作為臨時根檔案系統的載體

Ø  載入必要的驅動以便使核心可以訪問真正的根檔案系統

Ø  掛載真正的根檔案系統

Ø  進行根切換操用真正的根檔案系統作為根啟動

2.3    grub.config檔案

Ø  系統引導程式的設定檔

Ø  載入傳輸控制到作業系統的核心

設定檔說明:

         title - 引導條目的名稱。通常使用作業系統的名稱做為標識

root - 作業系統核心和引導檔案所在的磁碟分割。(hd0,0)表示第一塊硬碟的第一個分區,(hd0,2) 表示第一塊硬碟的第3個分區,依次類推。

kernel - 系統核心及 boot 命令用到的參數。

initrd - 系統引導程式

2.4    分析  

要完成無模組支援的Linux核心的定製就是不使用initrd.img,把系統所必須的磁碟驅動和檔案系統等的驅動編譯到系統的核心中,然後修改系統的設定檔引導系統找到系統核心所在磁碟的位置,最後完成系統的引導過程,從而順利的進入並登陸系統。

3       過程

3.1         配置menuconfig

Ø  去勾選模組支援

Ø  載入必要的驅動程式:主要是載入磁碟的驅動和檔案的驅動以及一些通常的設定

3.2         編譯核心

在核心源碼目錄執行make命令,編譯產生壓縮的核心鏡像bzImage,適當裁剪後的核心大小為15M

3.3         安裝核心

把產生的bzImage拷到/boot目錄下重新命名為vmlinuz-3.2.18

3.4         修改設定檔

Ø  這裡把“root=UUID=….”手動修改成了/dev/sdb2

Ø  沒有指定外部模組的位置

3.5         重啟選擇新的核心重啟

3.6         繼續裁剪,裁剪之後的核心和原來的核心做對比

4       遇到的問題和解決4.1     Linux網路設定   

剛開始學習Linux所以網路設定一竅不通,而且對虛擬機器的橋連,NAT,host-only等方式也不是很瞭解,雖然虛擬機器一開始的時候自動就能上網,但是後來不能連上網了。

bridge: 虛擬網卡和本機物理網卡是一個物理網上,能夠串連外網,虛擬機器內部和外部要配成和外部主機相同網段的IP

host only: 虛擬網卡VMnet1是一個物理網上,不能串連外網

NAT:和虛擬網VMnet8是一個物理網上,映射成主機的IP 和外部串連,網關只能配成192.168.10.2。

我採用的是橋連的方式內部IP配好之後還需配置網關和DNS伺服器

route add default gw 192.168.10.254

在/etc/resolv.conf種添加nameserver8.8.8.8

不過現在還有一點問題就是在實驗室用網線連時即使我的設定檔裡面寫了BOOTPROTO配成dhcp貌似也不能自動分配IP,但是在304用seedclass  wifi的時候就可以。這個問題暫時還沒有解決,每次手動設定也沒問題。

4.2    Kernel Panic

沒有意外,第一次編譯的時候也遇到了kernelpanic問題

這裡是root的值沒有傳對,也怪自己上課沒有認真聽講,仔細看了課件之後才發現這個問題

把root=UUID刪除改成root=/dev/sda1,不過還是遇到了同樣的問題。

這說明核心已經載入成功,只不過核心沒有辦法識別磁碟中的內容,於是我把設定檔裡面關於SCSI驅動所有選項基本上都加上去了,重新編譯,還是不行。

後面以為是加的驅動不全,於是在dmesg中各種檢索,重新設定重新編譯,最後還是不行。直到今天早上有同學告訴應該讓root=/dev/sdb2。

在網上看到有人說由於Linux核心自身的原因磁碟的裝置檔案比如/dev/sda /dev/sdb等等情況下會發生混亂,由於是Linux核心自身的問題所以也沒有辦法解決,不禁淚流滿面。

不過仔細想想還是對Linux認識的不夠深入,在網上找資料的時候也沒有什麼明確的方向,所以卡在這個點之後就很難再前進了,加上核心編譯的時間有相對而言比較長,所以很容易很是鍛煉人的耐心啊。不過問題總算是成功的解決了,只是新產生的核心有點大,15M,裁剪的還不夠。還需要進一步的配置

4.3    Putty下糾結的Ctrl + S

使用Putty串連Linux
Server的時候,偶爾不小心按了Ctrl + S——尤其是在用vim編輯的時候,總是習慣性的按這個快速鍵來儲存,但是一瞬間整個會話就沒有響應了。剛開始的時候以為是putty掛掉了,所以每次都是重新啟動,重新串連Linux
Server。也沒有意識到是因為按了這個快速鍵才遇到的。

       實際上在使用putty時ctrl
+ s終止螢幕輸出(即停止回顯),我們敲的內容依然有效,只是看不見而已,這個快速鍵的作用是當現實的內容很快時可以用ctrl+s鎖定。實際上我們只要按一下ctrl+q就可以解鎖了。

4.4    SElinux延時

這個問題也只有在啟動新的核心失敗的時候會發生,如果啟動新的核心,接著去啟動CentOS原來的核心就會出現這種現象。

官方給出的解釋如下:

3.As the Linux rootuser, run the reboot command to restart the system. During the next boot, filesystems are labeled. The label process labels all files with an SELinux context。

不過這並不影響系統的啟動,過了一段時間之後系統自動重啟,又恢複正常,只是啟動的時間比平常要久一點。

4.5     Make localyesconfig用不了

自己採用預設的方式稍微的剪裁之後核心大小為15M,然後自己一個一個的去對照每個選項去勾選要不要,但是由於自己對很多的硬體裝置根本就不認識,所以很多東西選擇也是很糾結。而且裁剪的效率貌似也很低。

從網上看到可以使用makelocalyesconfig和make localmodconfig來精簡核心的裁剪,但是我在我的源碼目錄下輸入make localyesconfig命令的時候出現的結果是這樣的現象,提示很多的modules找不到,使用make allnoconfig命令之後還是有這樣的現象。沒辦法我又把原來的linux3.2.18的源碼又解壓了一份出來,執行make localyesconfig就可以了。

其實第一次用這個命令的時候是在我自己編的3.2.18的核心裡面,是沒有載入核心模組的,自然沒有辦法載入modules,但是我切換到原來的系統的核心的時候還是沒有辦法運行make localyesconfig命令。所以這個問題現在還沒有找到原因。

4.6    編譯速度過慢

不得不提一下本次實驗的編譯,由於是在虛擬機器下面,而且電腦的配置也不是很好,所以編譯的速度特別的慢,第一次編譯的時候大概編了3個多小時,每次都花費了大量的時間來編譯。電腦也經常是動不動就是CPU使用率90%幾,記憶體使用量率90%幾。

一開始不知道make是可以增量編譯,每次都是傻乎乎的make clean然後make這樣原本編譯過的模組就又編譯了一次。

Make –j4選項,使用了多線程之後編譯的速度明顯的加快了。

把虛擬機器的處理器換成了4核之後速度也有一定程度的提升。

5       實驗總結

通過這次實驗,加深了我對Linux開機過程的理解,讓我明白了原本這麼簡單的開機過程也有這麼大的學問在裡頭,以前在Windows下面總是直接開機,關機就什麼都不管了,所以弄明白了這一系列的流程還是有一點小小的成就感的。

熟悉了Linux的很多常用的指令,和Linux文本互動的的模式:雖然之前也接觸過Linux但是那僅僅局限在玩的階段,真真使用起來還是有很多不知道的,不過周圍這麼多同學一起在努力,效率還是挺高的,不懂的就去man一下,google一把,或者是問問周圍的同學、老師。問題往往能夠很快的得到解決。漸漸地覺得在Linux下面那樣一種互動模式效率挺高的,不像在windows下——圖形化的介面雖然改善了使用者的體驗,但是往往專註度變得不高了。

關於學習方法,鐘老師說的對——不要害怕遇見問題,遇到問題越多的人有機會學到更多的知識,我自己以前總是怕遇到問題,總是對自己沒有信心,擔心自己解決不好這個問題,擔心自己會引入更多的問題。其實現在覺得是自己以前思考問題的方法不對,遇到問題的時候總是習慣性的直接去找答案,習慣性的去糾結,而不是理性的思考——為什麼會出現這個問題?這個問題是怎麼產生的,別人碰到的問題和我碰到的問題有什麼不同,為什麼別人能夠成功解決,而我不能。也就是說我的問題解決不是建立在理性的邏輯之上,而是帶有很大的撞大運的成分在裡面。這對於技術人員來說,無疑是很可怕的,我們今後要遇到的問題還有很多。如果不能有一個很好的思維的方式,怎麼能夠以不變應萬變?

做實驗的過程中不同步驟相互之間的牽涉要少,這樣做實驗的時候才會更加順利,從簡單到複雜,這樣逐步的建立一個完整的知識體系,也有利於問題的解決和學到更多的知識。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.