ramdisk是一个最小的linux rootfs系统,它包含了除内核以外的所有linux系统在引导和管理时需要的工具(一般使用busybox)。ramdisk文件有点像我们玩游戏的时候用的光盘镜像,制作过程有点复杂,涉及到的命令挺多,整理一下。
第一步、建立filesystem文件
这里的filesystem文件相当于“空光盘”了,有容量,但里面什么内容都没有
dd命令建立文件/tmp/my_fs
# dd if=/dev/zero of=/tmp/my_fs bs=1M count=250
# ll my_fs
-rw-r--r-- 1 root root 262144000 Jan 6 15:19 my_fs
if=/dev/zero 指定输入文件(in file)为/dev/zero。
用这种方式,稍后我们使用gzip命令压缩整个映象时,
将让文件系统中未使用的部分获得最大压缩比。
of=/tmp/my_fs 指定输出文件(out file)为/tmp/my_fs
bs=1K 输出文件的大小为 250M
count=250 也就是ramdisk文件系统的大小,即“光盘”的容量
注意:
filesystem文件不能直接读取,需要把它和设备文件相关联。
然后再把设备文件mount到挂载点目录。
对挂载点目录的操作,最终落实到filesystem文件
第二步、绑定设备文件与filesystem文件
# losetup /dev/loop0 /tmp/my_fs
# losetup /dev/loop0
/dev/loop0: [fd00]:21151794 (/tmp/my_fs)
绑定后,对/dev/loop0的操作就间接作用在
/tmp/my_fs上。
如果出现“ioctl:LOOP_SET_FD:设备或资源忙”,说明/dev/loop0设备还和另外的文件绑定着。
可用losetup /dev/loop0查看,并可用-d 解除绑定。
# losetup /dev/loop0
/dev/loop0: [fd00]:21151794 (/tmp/loop_tmp) #文件/tmp/loop_tmp与/dev/loop0绑定着
# losetup -d /dev/loop0
# losetup /dev/loop0
loop: can't get info on device /dev/loop0: No such device or address
第三步、格式化filesystem文件
# mke2fs -m 0 /dev/loop0
将filesystem文件格式化为ext2
-m 0 指出不必在文件系统上为“超级用户”保留任何区块。
记住对/dev/loop0的操作都应用到filesystem文件/tmp/loop_tmp上
Linux内核识别两种可以直接考贝的到ramdisk的文件系统,它们是minix和ext2。
minix是linux早期版本用的文件系统,但ext2性能更好。
第四步、挂载设备文件
# mkdir /mnt/loop
# mount -t ext2 /dev/loop0 /mnt/loop
第五步、拷贝文件至filesystem文件
这一步就相当于“刻盘”了。
用cp命令将所需要文件拷贝到/mnt/loop下就OK了,记住对/mnt/loop的操作相当于对/tmp/loop_tmp的操作
/bin /dev /etc /lib /proc /sbin /usr都是必需目录,建议保留/tmp /var,可以为空。
而为多用户提供可扩展环境的所有目录(例如/home、/mnt、/opt、/root)都应该省略。
用cp复制文件时,建议把已建立好的文件系统中的内容全部拷贝过来.
这样比较简单,不需要再去编译安装busybox等。当然自己也可以那样去做。
第六步、收尾工作
先卸载挂载点
# cd /mnt/loop以外的目录 (否则会提示无法卸载,设备busy)
# umount /mnt/loop
压缩filesystem文件,在/tmp下生成了my_fs.gz,同时my_fs被删掉
# gzip -v9 /tmp/my_fs
生成的my_fs.gz以后有用,别删
给文件加头使其可引导,即成为ramdisk
# mkimage -A ppc -O linux -T ramdisk -C gzip -d my_fs.gz my_ramdisk
第七步、板子启动,tftp加载my_ramdisk
第八步、更新ramdisk内部的文件
# cp my_fs.gz my_fs.gz.bak
# gunzip -v9 my_fs.gz
// 得到my_fs,同时my_fs.gz被删掉
# mount -o loop=/dev/loop3 my_fs /mnt/loop
// -o loop=/dev/loop3 将my_fs 与 /dev/loop3 绑定
// 将/dev/loop3 挂载到/mnt/loop下
# cd /mnt/loop
修改ramdisk上的文件。。。
# sync
# cd -
# umount /mnt/loop
# gzip -v9 my_fs
//得到my_fs.gz,同时my_fs被删掉
# mkimage -A ppc -O linux -T ramdisk -C gzip -d my_fs.gz my_ramdisk
阅读(1405) | 评论(0) | 转发(0) |