轉到bin下
#cd /babylinux/rootfs/bin
重新做這些鏈接:
#ln -s busybox chroot
#ln -s busybox getty
#ln -s busybox ifconfig
...
然后把sbin下的鏈接刪除,以節省空間
#rm -rf /babylinux/rootfs/sbin/*
再把原先inittab中所有的sbin改成bin
init.d下的文件:
rcS
請確保這個文件是可執行的,否則請改成可執行的:
#chmod u+x rcS
rcS的內容:
#! /bin/sh
mount -o remount,rw /
/bin/mount -a
>/etc/mtab
echo
echo
echo
echo
echo -en "\t\tWelcom to \\033[0;32mBabyLinux\\033][0;39m\n"
echo -en "\\033][0;36m\n"
echo
echo -en "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\t\t\n"
echo -en "+ This is a tiny linux system based on a floppy.It contains \t\t\n"
echo -en "+ more than 100 basic Linux commands and tools.The kernel of \t\t\n"
echo -en "+ this tiny system support all kinds of normal filesystems. \t\t\n"
echo -en "+ linux ext2,ext3,jfs,reiserfs and windows fat,vfat,ntfs][readonly]\t\t\n"
echo -en "+ is supported! So it is a powerful small system you can use it \t\t\n"
echo -en "+ as a linux and windows rescue disk.Beside this,the kernel also\t\t\n"
echo -en "+ contains the drivers of Reltek8139,NE2000,via-rhine ethernet\t\t\n"
echo -en "+ adpater. you can configure the IPaddress and netmask with tools\t\t\n"
echo -en "+ 'ifconfig' and config the default gateway with command 'route'. \t\t\n"
echo -en "+ Is there anything else? Haha,this is a telnet server build-in\t\t\n"
echo -en "+ you can type 'telnetd' to startd it and thus your friends can\t\t\n"
echo -en "+ logon to your system to help you solve the problem.\t\t\n"
echo -en "+ \\033[0;32mAll these great features are powered by BusyBox 1.0\\033][0;36m\t\t\n"
echo -en "+ This is a free system tool developed by GuCuiwen.\t\t\n"
echo -en "+ RUN YOUR OWN RISK of using it ! if you have any problem please\t\t\n"
echo -en "+ mailto : win2linux@163.com Enjoy!!\t\t\n"
echo -en "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\t\t\n"
echo -en "\\033][0;39m\n"
hostname BabyLinux
可以自己作相應的修改.
以上是babylinux根文件系統的所有內容,他的總大小應該在1M左右.
][root@gucuiwen baby]# du -hs
1.1M .
九,制作ramdisk映象文件
babylinux根文件系統所有東西都放在/babylinux/rootfs下,我們將利用ramdisk把這些內容做成ramdisk映象文件并壓縮他.
以下主要是ramdisk的用法,看完以下內容,你應當學會ramdisk的使用.
[root@gucuiwen babylinux]# dd if=/dev/zero of=/dev/ram1
dd: 正在寫入 ‘/dev/ram1’: 設備上沒有空間
讀入了 8193+0 個塊
輸出了 8192+0 個塊
zero是一個特殊的設備,表示全部為0的字符塊.上面這條命令的意思是把系統的第一個ramdisk用全部為0的數據填充,因為ramdisk默認大小為4M,因此當讀滿8192個塊(每塊512字節)后,顯示'設備上沒空間'.這很正常,/dev/ram1已經被填充滿了.
如果指定塊的大小:
[root@gucuiwen babylinux]# dd if=/dev/zero of=/dev/ram1 bs=1M count=4
讀入了 4+0 個塊
輸出了 4+0 個塊
不會有錯誤提示,這里演示了dd的一般用法,接下來還要頻繁用到dd命令.
在/dev下有很多ramdisk設備,ram1,ram2,ram3....
一般用第一個就可以了.
填充后,ram1就有可空間,可以在這個空間上創見一個文件系統:
[root@gucuiwen babylinux]# mkfs.ext2 -m0 /dev/ram1
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
1024 inodes, 4096 blocks
0 blocks (0.00%) reserved for the super user
First data block=1
1 block group
8192 blocks per group, 8192 fragments per group
1024 inodes per group
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
將ram1掛裝到文件系統中:
先建立一個掛裝點:
#mkdir /mnt/ram
掛上ram1:
#mount /dev/ram1 /mnt/ram
將先前做好的babylinux根文件系統拷貝到ram1上.
#cp -R /babylinux/rootfs/* /mnt/ram
做完以上幾步,你應就白了ramdisk設備的含義,他是和hda1,hdb1,一樣的塊設備,用mount掛到文件系統下后就可以訪問,往里放東西,但是所有的東西在內存上.關機將丟失所有東西.
拷貝好babylinux根文件系統后卸載ram1:
#umount /dev/ram1
這時,雖然不能通過/mnt/ram這個掛裝點訪問ram1中的內容了,但是他卻切切實實得在內存中存在.
再用dd把這個ram1以映象方式取出來:
[root@gucuiwen babylinux]# dd if=/dev/ram1 of=/babylinux/ramdisk.img
讀入了 8192+0 個塊
輸出了 8192+0 個塊
驗證一下取出來的內容:
[root@gucuiwen babylinux]# file ramdisk.img
ramdisk.img: Linux rev 1.0 ext2 filesystem data
他是一個ext2 文件系統,類似一個ISO光盤映象文件.
因次,我們可以用loop設備來把他重新掛裝到文件系統里:
[root@gucuiwen babylinux]# mount -o loop ramdisk.img /mnt/ram/
為了方便,我仍舊把他掛在/mnt/ram下,因此,在先前一定要把/dev/ram1 umount掉
查看/mnt/ram下的內容,他應該和/babylinux/rootfs下的一模一樣,否則就是出錯了:
[root@gucuiwen babylinux]# ls /mnt/ram
bin dev etc home lost+found mnt proc root sbin tmp usr var
這樣,我們就得到了一個ramdisk根文件系統映象:ramdisk.img
把他umount掉:
#umount /mnt/ram
如果是第一次接觸ramdisk,你可能對上述的內容很迷惑,如果這樣,請反復閱讀和理解上面的內容,自己多動手做幾次試驗,就可以理解.
壓縮ramdisk.img印象文件:
[root@gucuiwen babylinux]# gzip -v9 ramdisk.img
ramdisk.img: 87.9% -- replaced with ramdisk.img.gz
查看壓縮后的大小:
[root@gucuiwen babylinux]# ls -lh ramdisk.img.gz
-rw-r--r-- 1 root root 495K 11月 30 11:32 ramdisk.img.gz
我得到的壓縮ramdisk映象文件安是495K. 加上內核的845K,是1340K
符合公式:
內核大小+文件系統壓縮印象文件+50K <= 1440K
如果你做出來的kernel和ramdisk.img.gz太大了,請重新制作kernel或ramdisk.img.gz,在其中做一些取舍,如果你的 kernel和ramdisk.img.gz太小了,那么可以再往里面添加一些內容,使你的babylinux功能更強.
十,內核與busybox的整合
準備一張完好的空白軟盤
創建一個比內核大小略大的文件系統:
比如內核大小是845K,那么我我創見一個920K的文件系統:
#mkfs.ext2 -m0 /dev/fd0 920
如果空間允許,還可以再大一些,但是必需保證
1440K-文件系統大小>=ramdisk.img.gz的大小.
掛上軟盤
#mount /dev/fd0
將內核拷貝到軟盤:
#cp /babylinux/bzImage /mnt/floppy/
將lilo引導文件安boot.b 拷貝到軟盤
#cp /boot/boot.b /mnt/floppy
新建一個lilo.conf 配置文件:
prompt
timeout=60
default=linux
boot=/dev/fd0
map=/mnt/floppy/map
install=/mnt/floppy/boot.b
image=/mnt/floppy/bzImage
label=linux
read-only
vga=788
root=/dev/fd0
append="load_ramdisk=1 ramdisk_start=940"
vga=788表示讓內核支持字符界面的高分辨率顯示,你可以改成vga=ask,這樣可以在啟動的時候選擇分辨率.
紅色一行是關鍵,load_ramdisk=1告訴內核在啟動的時候轉載壓縮的ramdisk印象文件,
ramdisk_start=940 告訴內核從軟盤的第940K的地方去尋找并裝載壓縮的ramdisk印象文件.
關于ramdisk的用法和更多參數請查看linux0內核文檔/usr/src/linux/Documents/ramdisk.txt
接下來再用dd命令把ramdisk.img.gz裝到軟盤上.
#dd if=/babylinux/ramdisk.img.gz of=/dev/fd0 bs=1k seek=940
這里的seek=940 表示把ramdisk.img.gz裝到軟盤的第940K開始的地方.
詳細內容請看dd的聯機文檔 man dd
為什么要從940k開始呢?
因為剛才作了一個920K的文件系統.我把他裝在文件系統20K以后的地方.
當然,如果你的空間十分緊張,連這20K都不舍得浪費,那么可以這樣:
#dd if=/babylinux/ramdisk.img.gz of=/dev/fd0 bs=1k seek=921
當然,別忘記修改lilo.conf文件. ramdisk_start=921
接下來裝lilo引導程序就大功告成了.
#lilo -C lilo.conf
如果你的磁盤上還有一點點空余空間,那么可以把lilo.conf也拷貝上去,以備將來使用.
#cp lilo.conf /mnt/floppy
#umount /dev/fd0
整個工程已經完成了,你可以重新啟動機器,設置電腦從軟盤啟動.看看有沒有成功.
十一,安裝測試和內容調整
如果在整合內核和ramdisk映象過程中,出現磁盤空間不夠的情況,請重新編譯內核和busybox
可以根據實際需要,調整內核和busybox,比如你要內核支持很多東西,但是只需要一個支持50個命令的busybox,那么可以自己做相應調整.
評論
查看更多