把Linux放進(jìn)軟盤(pán)里
壓縮根文件系統(tǒng)
一般我們會(huì)采取 RAM Disk 的方式實(shí)現(xiàn)。簡(jiǎn)單的來(lái)說(shuō)就是將準(zhǔn)備好的根文件系壓縮成為Ramdisk的鏡像文件,當(dāng)用軟盤(pán)啟動(dòng)時(shí),再把鏡像文件解壓到內(nèi)存中,形成一個(gè)虛擬盤(pán)(RAMDISK),通過(guò)RAMDISK控制系統(tǒng)啟動(dòng)。
我們現(xiàn)在制作Ramdisk的鏡像文件
# dd if=/dev/zero of=/tmp/tmp_loop bs=1k count=2048
# losetup /dev/loop0 /tmp/tmp_loop
# mke2fs -m 0 /dev/loop0
# mount -t ext2 /dev/loop0 /mnt
# cp -a /floppy-Linux /mnt
# umount /mnt
# losetup -d /dev/loop0
# dd if=/tmp/tmp_loop | gzip -9 > /tmp/Image.gz
# rm -f /tmp/tmp_loop
# sync
這樣我們就得到了壓縮過(guò)的根文件系統(tǒng)也就是Ramdisk的鏡像文件Image.gz。
目前為止我們已經(jīng)有了內(nèi)核和壓縮過(guò)的根文件系統(tǒng).現(xiàn)在剩下的就是把它們整合在一張軟盤(pán)里面。
整合核心和根文件系統(tǒng)
根據(jù)引導(dǎo)的方式不同,有以下三種整合方案:
用grub引導(dǎo)
依次執(zhí)行:
# mke2fs /dev/fd0
# mount /dev/fd0 /mnt/floppy
# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /boot/grub/stage1 /mnt/floppy/boot/grub
# cp /boot/grub/stage2 /mnt/floppy/boot/grub
#grub
在 grub> 提示符處,輸入:
grub> root (fd0)
grub> setup (fd0)
grub> quit
#cp newkernel /mnt/floppy/boot
#cp Image.gz /mnt/floppy/boot
#cp /boot/grub/grub.conf /mnt/floppy/boot/grub
編輯grub.conf, 內(nèi)容如下:
timeout 10
default 0
title My little Linux
root (fd0)
kernel /boot/newkernel ro root=/dev/ram0
initrd /boot/ Image.gz
然后制作grub.conf的link文件menu.lst
#ln -s /mnt/floppy/boot/grub/grub.conf /mnt/floppy/boot/grub/menu.lst
#umount /mnt/floppy
整合完成!
用sysLinux引導(dǎo)
依次執(zhí)行:
# mkdosfs /dev/fd0
# sysLinux /dev/fd0
編輯 sysLinux 的組態(tài)檔 sysLinux.cfg,內(nèi)容如下
TIMEOUT 20
DEFAULT Linux
LABEL Linux
KERNEL newkernel
APPEND root=/dev/ram0 ro initrd=Image.gz
然后將 sysLinux.cfg、newkernel、Image.gz 拷貝到磁盤(pán)中
# mount /dev/fd0 /mnt/floppy
# cp newkernel /mnt/floppy
# cp Image.gz /mnt/floppy
# cp sysLinux.cfg /mnt/floppy
#umount /mnt/floppy
整合完成!
直接引導(dǎo)
依次執(zhí)行:
# dd if=newkernel of=/dev/fd0 bs=1k
252+1 records in
252+1 records out
在這個(gè)例子中,dd 寫(xiě)入了 252 個(gè)完整記錄(records) + 1個(gè)partial record ,所以內(nèi)核占用了 253 個(gè)軟盤(pán)的 blocks 。這個(gè)數(shù)字稱(chēng)為 KERNEL_BLOCKS ,請(qǐng)記得它,這個(gè)數(shù)字還要使用.
#rdev /dev/fd0 /dev/fd0
#rdev -R /dev/fd0 0
#rdev -r /dev/fd0 VALUE
在這里這個(gè)VALUE的值應(yīng)為16384+ KERNEL_BLOCKS(上一步dd 命令所產(chǎn)生的數(shù)值)
所以本例應(yīng)為:
#rdev -r /dev/fd0 16637
#dd if= root system file of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS
在這里這個(gè)KERNEL_BLOCKS就是上一步dd 命令所產(chǎn)生的數(shù)值
所以本例應(yīng)為:dd if= Image.gz of=/dev/fd0 bs=1k seek=253
整合完成!
現(xiàn)在我們就擁有了一張可以自激活到Linux環(huán)境的軟盤(pán)。對(duì)于本例來(lái)講,想要執(zhí)行AMD官方測(cè)試軟件Maxpower64,只要將Maxpower64這個(gè)可執(zhí)行文件復(fù)制到 /bin目錄就可以了。我們可以在“使用BusyBox制作常用命令“這個(gè)階段來(lái)完成它.
# cp Maxpower64 /floppy-Linux/bin
這張軟盤(pán)會(huì)自激活到linux環(huán)境下,并顯示“#”命令提示符,我們只要執(zhí)行Maxpower64就可以了。
#/bin/Maxpower64
如果希望系統(tǒng)一開(kāi)機(jī)就直接執(zhí)行Maxpower64,則需要在“編輯有關(guān)的 shell script”這個(gè)階段編輯rc.sysinit文件為:
#!/bin/sh
mount –a
/bin/Maxpower64
這樣軟盤(pán)引導(dǎo)進(jìn)入linux后會(huì)直接執(zhí)行Maxpower64而不再顯示“#”命令提示符。
小結(jié)
除了以上的方法,我們也可以通過(guò)引導(dǎo)器給內(nèi)核傳遞參數(shù)來(lái)實(shí)現(xiàn)內(nèi)核和根文件系統(tǒng)分別放置在不同的軟盤(pán)上,這樣內(nèi)核就可以再大一些,支持的功能也就越多。總之制作一張包含小型linux的軟盤(pán)并不困難,關(guān)鍵是要細(xì)心和耐心,此外最好能夠了解BusyBox和RAMDISK的工作原理,這對(duì)于更好的完善系統(tǒng)是有很大幫助的。
評(píng)論