核心的配置與編譯
Linux的核心是可以配置的,就是說可以根據使用者的需要進行配置,正是因為Linux的核心可以自由的配置,自由的裁剪,減小核心的體積,才使得Linux的核心可以移植到arm平台上去。
Linux核心配置具體步驟如下:
1. 清除臨時檔案,中間檔案和設定檔(為什麼要清除呢?在得到一個核心以後會有許多垃圾檔案需要清除)
$make clean(刪除垃圾檔案 保留設定檔)
$make mrproper(刪除垃圾檔案 刪除設定檔)
$make distclean(刪除垃圾檔案 刪除設定檔 刪除補丁檔案)
2. 確定目標系統硬體設定情況,比如cpu的類型,網卡型號,所需支援的網路通訊協定,修改Makefile
3. 使用如下命令之一配置核心
$make conifg 基於文字模式的互動式配置(執行之後會在配置的過程中通過提問的方式來配置)
$make menuconfig 基於文字模式的菜單配置
$make oldconfig 使用已有的設定檔(.config)與make config的區別只做表明為new的配置項
$make xconfig圖形化配置選項(需要安裝圖形化介面)
有一些預設的符號其含義如下:
y:載入
n:不載入
m:作為模組載入
使用完以上congfig命令之後,會自動產生一個.config檔案,檔案的資訊儲存了核心配置的結果。
要配置arm的核心,可以根據arch中的預設配置在此基礎上修改。
root=/dev/nfs rw nfsroot=192.168.1.100:/source/rootfs ip=192.168.1.200 init=/linuxrc console=ttySAC0,115200
root 指定根檔案系統
rw/ro 指定掛載檔案系統的屬性,讀寫、唯讀
nfsroot 指定nfs服務掛載點,<nfs server ip>:<export directory>
ip 指定目標板ip地址
init 指定核心初始化完成後調用的使用者空間程式,預設為/sbin/init
console 指定列印資訊的終端
mem 指定記憶體大小
initrd 指定ramdisk引導時根檔案系統所在記憶體位置和大小
4. 編譯核心
make zimage
make bzimage(big的意思)
區別:在X86平台,Zimage只能用於小於512k的核心
編譯好的核心位於arch/cpu/boot目錄下
5. 編譯核心模組
make modules
6. 安裝核心模組
make modules_install(將編譯好的核心模組從核心原始碼目錄copy到/lib/modules下)
7. 製作 init ramdisk
mkinitrd initrd-$version $version例:mkinitrd initrd-2.6.29 2.6.29 $version 可以通過查詢/lib/modules/下的目錄得到,看上一步的命令是否有在/lib/modules/下產生2.6.29/目錄。該命令執行後會在核心根目錄下產生"initrd-2.6.29"檔案。
init ramdisk的作用:提供一種讓核心可以簡單使用ramdisk的能力。這些能力包括:格式化一個ramdisk;負載檔案系統內容到ramdisk;將ramdisk作為根檔案系統。
8.核心安裝 由於Linux系統啟動時,會從/boot目錄下來尋找核心檔案與init ramdisk,所以需要將核心檔案和init ramdisk拷貝到/boot目錄。(1) cp ./arch/x86/boot/bzImage /boot/vmlinuz-$version例:cp ./arch/x86/boot/bzImage /boot/vmlinuz-2.6.29註:vmlinuz-2.6.29可以任意取名,這裡只是取比較有意義的名字而已。(2) cp $initrd /boot/ $initrd指命令mkinitrd initrd-$version $version執行後在核心根目錄下產生的"initrd-2.6.29"檔案,即init ramdisk檔案。例:cp initrd-2.6.29 /boot/(3) 修改/etc/grub.conf或者/etc/lilo.conf將代碼:title CentOS-base (2.6.18-238.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-238.el5 ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.18-238.el5.img複製並且改成:
title chen (2.6.29)
root (hd0,0)
kernel /vmlinuz-2.6.29 ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.29
其只是根據本文的具體情況,對kernel的vmlinuz-2.6.18-238.el5 改成vmlinuz-2.6.29 ,將initrd的initrd-2.6.18-238.el5.img改成initrd-2.6.29
**$version為所編譯的核心版本號碼,本文採用2.6.29(即$version=2.6.29)**