在fedora下研究驅動的開發,所以想用一個標準的linux核心,於是嘗試在fedora上構建多核心。經過昨天一天的嘗試終於成功了。過程其實並不複雜。在這簡要說一下,一來做個總結,二來或許能給其他人提供參考。
1、下載核心源碼
從linux官方網站http://www.kernel.org上下載核心源碼。我下的是linux2.6.20
下載後放在/usr/src/kernels下,fedora8 的usr/src下有kernels檔案夾,一般直接放在/usr/src下
2、配置核心
根據你的pc實際情況配置,比較繁瑣,一般大部分可以預設。我用的是虛擬機器,其中關鍵幾個設定參考了網上的一篇文章,如下:
配置核心選項。有點繁瑣,~~希望一次成功哦~~。
# cd linux-2.6.18 (進入到/usr/src/linux-2.6.18目錄下)
# make mrproper (該命令可確保原始碼目錄下沒有不正確的.o檔案)
# make menuconfig (配置核心各選項)
此時會出現一個圖形介面,列出了所有的核心配置選項,有的選項下還有子選項,你可以用方向鍵來選擇,用Y鍵來確定。經過我多次實驗,大多數選項預設就行,以下幾個選項必須選擇(請認真核對下面每一個選項,否則編譯很有可能前功盡棄):
(1)Loadable Module support選項中,選上“Module unloading”和“Automatic kernel module loading”這兩項;
(2)Device Drivers--->Block Devices中選上“Loopback device support”;
Device Drivers--->Multi-device support(RAID and LVM)處要選上“device mapper support”;
Device Drivers--->Graphics support,一定要選上“ Support for frame buffer devices”;
Device Drivers --->USB support --->選上“USB Mass Storage support”(如果是在實環境中,想要更多USB支援,就全選吧。我的是在虛擬機器中,用不著了)
Device Drivers --->;Network device support --->Ethernet (10 or 100Mbit) ---><*> AMD PCnet32 PCI support
(3)File system--->(以下9個選項是關於ext2和ext3檔案系統配置,全部選上)
Second extended fs support
Ext2 extended attributes
Ext2 POSIX Access Control Lists
Ext2 Security Labels
Ext3 journalling file system support
Ext3 extended attributes
Ext3 POSIX Access Control Lists
Ext3 Security Labels
JBB (ext3) debugging support
File system--->DOS/FAT/NT Filesystems --->選上“NTFS file system support”;
注意:
ext2和ext3檔案系統配置很重要,也是必需的,如果對Ext3、Ext2檔案的支援直接編譯進核心,在你reboot時機器就會當掉,出現如下錯誤資訊:
kernel panic : no init found ,try passing init = option to kernel.....
或者是:
VFS:Cannot open root device "hdxy" or unknow-block(0,0)
Please append a correct "root=" boot option
kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)
或者是:
mount: error 19 mounting ext3
pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2
umount /initrd/proc fail: 2
Freeing unused kernel memory: 244k freed
Kernel panic – not syncing: No init found. Try passing init = option to kernel
(我的機器就是在重啟之後出現第三種錯誤,進不去系統,鬱悶死,只好重裝了~~~如果依照本文做完所有步驟,當你重啟Linux系統後,若不幸進不去2.6.18核心,你會發現你的出錯資訊就是上面三種了~~~哈!)
(4)如果你在vmware下編譯核心,硬碟用的是scsi的,以下三個選項必選:
Device Drivers ---><*>SCSI device support (此項不選的話,下面兩項就選擇不上)
Device Drivers ---><*>SCSI device support ---><*>SCSI disk support
Device Drivers---><8>SCSI device support--->SCSI low-level drivers---><*>; BusLogic SCSI support
3、編譯核心及核心模組
執行如下命令
$make dep
$make clean
$make bzImge //這個時間相對比較長,可以去外面轉悠轉悠再回來
$make modules
$make modules_install
有的教程會繼續有make install這個命令是把核心自動安裝到指定位置,是否會覆蓋掉原核心我沒有考證,但我執行這一步後,從啟就進不了系統了,鬱悶!
4、手動建立核心開機檔案
主要是三個檔案:bzImage-version,initrd.img-version,System.map-version
建立過程參見上一篇文章:核心啟動的幾個核心檔案 不同核心的makefile不同所以檔案產生的位置有所不同。
注意的是由於boot下有兩組(多核心的話多組)核心啟動的三個檔案,最好加上version加以區分。
5、修改grub.conf或lilo
按照原grub.conf樣式增加一個核心選項即可。
ok,到此為止,重啟就會多出個核心選項,核心名可以在grub.conf中自己改。