3. 選擇內核
在你完成了制做壓縮的根文件系統後,下一步就是選擇或自己創建一個內核。多數情況下,你可以拷貝現有系統的內核,但是有些情況下,你不得不自己另外創建一個。最可能出現的問題就是容量限制:如果你想做單張的啟動盤,盤中最大的文件往往是內核,所以你必須想方設法壓縮內核的體積。要想壓縮內核體積,創建它時就得把不必要的功能去掉,如去掉對網絡的支持和對不必要設備的支持,但是一定要記住保留內核對R AMDISK和ext2的支持,否則你的啟動盤將不能工作。還有就是要記住把對你備份所用設備的支持加到內核中去,因為啟動盤的最大用處就是檢測和修復損壞的系統,如果你沒有把對備份設備的支持加到內核中去,你將沒有辦法修復損壞的系統,只能再重裝L inux。
創建新內核的方法我就不在此敘述了,如有問題,請查閱相關資料。重建完內核後記住用“make zImage”壓縮內核。
4. 整合
有了根文件系統和內核之後,最後的工作就是把它們整合在一起。
先檢查總文件的大小,如果超出1.44M,就得考慮重新創建所需或用兩張磁盤,即使用兩張磁盤,你的根文件系統也得小於1.44M。
接著就是確定是用LILO控制啟動還是直接用拷貝到盤上的內核控制啟動。用LILO的好處是你能增加支持初始化硬件的參數到內核中,缺點是較復雜且占用珍貴的磁盤空間,不過我還是建議使用L ILO控制系統啟動。下面我就介紹用LILO的過程,直接用拷貝到盤上的內核控制啟動的方法就不作敘述了。
用LILO控制啟動首先就得寫一個LILO配置文件,以下是一個最簡單的配置文件,但是已經夠用了。
boot =/dev/fd0
install =/boot/boot.b
map =/boot/map
read-write
backup =/dev/null
compact
image = KERNEL
label = Bootdisk
root =/dev/fd0
參數說明見相關資料。然後把它命名為bdlilo.conf。
接下來就是創建一個內核文件系統。把一張干淨的軟盤插入軟驅,在上面創建ext2文件系統。
mke2fs -i 8192 -m 0 /dev/fd0 50
“-i 8192”表示每8192位創建一個信息節點。接著登陸系統:
mount /dev/fd0 /mnt
rm -rf /mnt/lost+found
mkdir /mnt/{boot,dev}
刪去目錄/ lost+found,創建兩個目錄/boot和/dev。
再拷貝現有系統中的到目錄/dev中,
cp -R /dev/{null,fd0} /mnt/dev
接著拷貝啟動加載器boot.b到目錄/boot中,
cp /boot/boot.b /mnt/boot
最後,拷貝你創建的配置文件bdlilo.conf和內核到內核文件系統的根目錄下,
cp bdlilo.conf KERNEL /mnt
現在,根文件系統所需所有文件都准備就緒了,你可以運行它了,運行結果應該沒有錯誤,否則就應該仔細檢查一下。最終的文件目錄應該如下所示:
--------------------------------------------------------------------------------
total 361
1 -rw-r--r-- 1 root root 176 Jan 10 07:22 bdlilo.conf
1 drwxr-xr-x 2 root root 1024 Jan 10 07:23 boot/
1 drwxr-xr-x 2 root root 1024 Jan 10 07:22 dev/
358 -rw-r--r-- 1 root root 362707 Jan 10 07:23 vmlinuz
boot:
total 8
4 -rw-r--r-- 1 root root 3708 Jan 10 07:22 boot.b
4 -rw------- 1 root root 3584 Jan 10 07:23 map
dev:
total 0
0 brw-r----- 1 root root 2, 0 Jan 10 07:22 fd0
0 crw-r--r-- 1 root root 1, 3 Jan 10 07:22 null
接著設置內核鏡像文件中的ramdisk的偏移量以指出如何確定定位根文件系統。該指示詞可以通過命令rdev來設置,它的內容含義如下所示:
bits 0-10: ramdisk開始的偏移量, 在1024 byte數據塊中
bits 11-13: 不用
bit 14: ramdisk加載的提示標記
bit 15: 加載根文件系統之前提示標記
如果位15被設置,當系統盤啟動時將會提示你准備好另一張軟盤,如果你的啟動盤是兩張的話,這個設置很有用。
對於使用單張和兩張啟動盤的用戶,ramdisk的偏移量是不同的:
如果你的啟動盤只有一張,那麼壓縮的根文件系統會被放置在內核之後,因此偏移量將會是第一個空閒的數據塊,bit 14 應設置為1,bit 15設置為0。例如,如果你的啟動盤根文件系統起始於數據塊253(十進制),你的ramdisk偏移量應該是253 + 214 = 253 + 16384 = 16637。
如果你的啟動盤有兩張,那麼你的根文件系統起始於第二張盤的0數據塊,所以偏移量是0,bit 14 應設置為1,bit 15應設置為1,最終值為
214 + 215 = 49152。
計算好偏移量後,用命令rdev –r進行設置,記住用十進制:
rdev -r /mnt/vmlinuz 偏移量
設置完後,從/mnt卸下軟盤。
最後一步是傳輸根文件系統,分兩種情況:
·如果你的內核於根文件系統在同一張軟盤上,用加選項seek的命令dd傳輸,dd if=rootfs.gz of=/dev/fd0 bs=1k seek=內核數據塊數。
·如果根文件系統位於第二張軟盤上,移走第一張軟盤,插入第二張盤,然後傳輸根文件系統dd if=rootfs.gz of=/dev/fd0 bs=1k。
祝賀你,你的系統啟動盤已經做好了,剩下的就是測試你的啟動盤的正確性了,如果有問題,對不起,你還得從頭再來。
現在許多Linux的發行套件中都有廠家做好的啟動盤,它們的制做原理和以上我介紹的大同小異,但是它們常常用許多不同的技巧,因為它們要面對更多的硬件和各種可能發生的情況。大家可以拿一張來慢慢研究,你會從中學到很多知識。
最後祝大家都能作出一張稱心如意的啟動盤,讓你的linux永保青春。