最小的Linux系统制作过程详解
系统拷贝到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
linear
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,那么可以自己做相应调整.
十二,ba
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
