Linux內核裁減

http://blog.sina.com.cn/s/blog_490168e50100dw9r.html

一、內核編譯

1、準備工作

1)整理出系統需要支持的硬件、文件系統類型以及網絡協議等內容。

2)建議用命令uname r 查看一下系統的版本號,如果你的系統版本與將要編譯的內核版本一致,建議將/lib/modules下的內容備份,否則將來的make modules_install 步驟產生的文件會覆蓋這個路徑下的內容。

3)下載並解壓linux內核,建議從http://www.kernel.org/pub/linux/kernel/ 下載內核,因爲安裝系統時所安裝的源代碼默認情況下支持很多設備,這樣給內核裁減增加了難度。以下假設你已經下載了內核的爲linux-x-y-z.tar.gz。一般都將linux內核源代碼放在/usr/src下,這裏仍然遵守這個習慣,如果你的這個路徑下已經存在這個版本的內核,建議將已有的改個名稱。

2、開始編譯

1make mrproper

確保源代碼目錄下沒有不正確的.o文件和文件依賴關係,執行該命令後,內核選項會回到默認的狀態下。如果你是下載的內核源碼,而且是第一次編譯,就沒有必要執行這一步操作

2make menuconfig

以文本菜單方式選擇內核選項(與它功能相同的命令還有make configmake xconfigmake oldconfig),不同版本的內核,選項可能會有一些差異。這一步是內核編譯的關鍵,根據需要支持的硬件、文件系統和協議等內容,選擇不同的選項。配置選項時,有三種選擇方式,它們代表的含義如下:

Y-將該功能編譯進內核

N-不添加功能

M-將該功能編譯成模塊,在需要時動態加載到內核

選擇的原則是與內核關心緊密而且經常使用的部分功能代碼直接編譯到內核中;將與內核系較遠且不經常使用的部分功能代碼編譯成爲可加載模塊,有利於減小內核的長度,減小內核消耗的內存,簡化該功能相應的環境改變時對內核的影響;不需要的功能就不要選。

我們使用空格鍵進行選取。根據選項的不同,按下空格鍵的結果也有所不同:選項後有”―――>”符號的,進入下一級菜單;選項前有中括號的,則在空和"*"之間切換;選項前有尖括號的,在空、"*""M"之間切換;選項前有圓括號的,需要在所提供的幾個選項中選擇一項,或者需要輸入數值等符號。咦,什麼?要我詳細介紹具體該怎麼選擇這些選項?大汗!這可是個大問題,需要根據不同的需求進行選擇,比如需要支持USB鍵盤、鼠標或/和存儲器,支持多CPU,支持網卡,串口,支持TCP協議,ext2文件系統,nfs文件系統等等。後面我將就內核選項做詳細的介紹。

3make dep

根據上一步所選擇的選項,建立文件的依賴關係。

4make clean

清理一些不必要的文件,如果你在上次編譯的基礎上,刪去了一些選項,建議你執行這一步操作,否則,就沒有必要了。

5make bzImage

生成內核壓縮文件。如果你確認你的內核在640K以下,你可以用make zImage來代替 make bzImage。這一步相當費時,你可以在命令後加上&,讓其在後臺執行,或者重定向到/dev/null中,這樣你就什麼也看不見屏幕上閃過不停的字符啦。編譯出的內核在 ./arch/i386/boot/ 下,文件名爲bzImage

6copy "/usr/src/linux/arch/i386/boot/bzImage  /boot/vmlinuz-x.y.z

7make modules

編譯可加載模塊(即內核選項中選擇爲M的選項),編譯時間跟M選項的數量有關。

8make modules_install

將編譯好的modules拷貝到/lib/modules下,這就是爲什麼在“準備工作”的第三步提醒你備份的原因了。

9cp /usr/src/linux/System.map /boot/ System-x.y.z.map

3、修改啓動配置文件

現在大多數使用的都是grub啓動,需要修改/boot/grub/grub.conf,添加相應的啓動信息,添加內容的最簡單格式如下:

title 顯示在啓動菜單上的名稱

root 根文件系統掛載分區

kernel 壓縮過的內核文件名

initrd 根文件系統文件名

如:

title My new kernel

root (hd0,2)

kernel /boot/vmlinuz-x.y.z

initrd /boot/initrd-x.y.z.img

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章