Linux核心的配置與編譯(X86平台)
本文轉自:http://www.linuxidc.com/Linux/2013-07/87360.htm
說明:只供學習交流
目的:
(1):配置、編譯X86平台下的Linux-2.6.29核心
(2):在vmware下安裝編譯好的核心並啟動
工具:
Gcc編譯器, Linux-2.6.29核心
步驟:
(一):清除臨時檔案,中間檔案和設定檔等(剛從網上下載下來的檔案這步可省略)。
make clean
刪除大多數的由編譯產生的檔案、但會保留核心的設定檔.config。
make mrproper
刪除所有的編譯產生的檔案,還有核心設定檔,再加上各種備份檔案。
make distclean
mrproper刪除的檔案,加上編輯備份檔案和一些補丁檔案。
(二)選擇參考設定檔
使用正在啟動並執行核心設定檔作為參考配製檔案,該設定檔在/boot目錄下,使用命令
cp /boot/config-2.6.18-53.el5 .config。
(三)配置核心
配置核心有如下命令:
make config:基於檔案模式的互動式配置(也就是一問一答)。
make menuconfig:基於文字模式的菜單式配置(強烈推薦)。
make oldconfig:使用已有的設定檔(.config)但是會詢問新增的配置選項。
make xconfig:圖形化配置(需要安裝圖形化系統)。
make menuconfig是最為常用的核心配置方式,使用方法如下:
1、使用方向鍵在各選項間移動;
2、使用“Enter”鍵進入下一層選單;每個選項上的高亮字母是鍵盤快速鍵,使用它可以快速地到達想要設定的選單項。
3、在括弧中按“y”將這個項目編譯進核心中,按“m”編譯為模組,按“n”為不選擇(按空格鍵也可在編譯進核心、編譯為模組和不編譯三者間進行切換),按“h”將顯示這個選項的協助資訊,按“Esc”鍵將返回到上層選單。
核心配置通常在一個已有的設定檔基礎上,通過修改得到新的設定檔Linux核心提供了一系列可供參考的核心設定檔,位於Arch/$cpu/configs
注意:要運行make menuconfig的介面需要調整終端的視窗大小,至少為80*19。
(四)編譯核心
(1):make zImage
(2):make bzImage
區別:在X86平台,在zImage只能用於小於512Kd的核心(注意是X86平台)
如需擷取詳細編譯資訊,可使用:
make zImage V=1
make bzImage V=1
編譯好的核心位於arch/<cpu>/boot目錄下
(五)編譯核心模組
使用命令make modules
核心模組編譯的時間比較長,一般需要1~2小時的時間。這些模組源於使用命令make menuconfig啟動的菜單型配置介面中選擇<m>的項。
(六)安裝核心模組
使用命令:make modules_install,完成安裝後,編譯好的核心模組會從核心原始碼目錄拷貝至/lib/modules/2.6.29目錄下。
(七)製作init ramdisk
使用cd跳動linux-2.6.29/,目錄的上層目錄,使用命令:mkinitrdinitrd-$version $version(mkinitrd initrd-2.6.29 2.6.29)將上一步中產生的模組目錄/lib/modules/2.6.29製作成initrd-2.6.29。
提示:initrd是“initial ramdisk”的縮寫,initrd是在實際根檔案系統可用之前掛載到系統中的一個初始根檔案系統。在案頭或伺服器Linux系統中,initrd是一個臨時的檔案系統。其生命週期很短,只會用作真實檔案系統的一個橋樑。在沒有存放裝置的嵌入式系統中,initrd可以是永久的根檔案系統。
Linux的眾多發行版之所以使用initrd主要是為了在核心啟動之後能夠判斷哪些硬體驅動需要載入,哪些不需要,檔案系統有沒有問題等,最終使得根分區能順利載入。在scsi和sata裝置上啟動,usb啟動盤,無盤伺服器等都需要initrd來做判斷,這樣可以提高Linux核心的通用性。
(八)安裝核心
由於Linux系統啟動時,會從/boot目錄下尋找核心檔案與init ramdisk,所以需要將核心和initrd拷貝至/boot目錄。使用命令:
cp initrd-2.6.29 /boot
cp linux-2.6.29/arch/x86/boot/bzImage /boot/vmlinuz-2.6.29
(九)修改/etc/grub.conf或者/etc/lilo.conf
為了讓grub在啟動時能提供一項我們自己製作的linux核心的選項,需要修改grub的設定檔/etc/grub.conf。(添加的代碼為title My Linux(2.6.29)以下的)
注意:/etc/grub.conf實際上是/boot/grub/grub.conf的一個連結,因此真正的設定檔存在與/boot/grub目錄下。
(十):重啟系統
使用命令reboot,重新啟動系統,按住空格鍵不放,直到進入grub介面,選擇My Linux(2.6.29)啟動。
推薦閱讀:
Linux核心原始碼情景分析(上下全集高清版) PDF http://www.linuxidc.com/Linux/2013-04/82908.htm
Linux核心驅動開發之KGDB單步調試核心 http://www.linuxidc.com/Linux/2013-06/86233.htm