【精品博文】为Miz702制作ramdisk文件系统(下)
挖宝
学习如何简化水
、燃气、热量计
量应用设计
2.3 工具链动态与应用的设置
进入/home/devel/_rootfs,创建lib目录
cd /home/devel/_rootfs mkdir lib
将交叉编译环境库拷贝到这个目录下
cp /home/milinker/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/lib/* lib -r
同样,将工具链拷贝到sbin/和usr/bin/下
cp /home/milinker/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/sbin/* sbin -r cp /home/milinker/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/bin/* usr/bin -r
2.4 目录的创建与配置
这一步是要创建文件系统下其余的目录,以及在启动系统时所需的配置文件,所有操作都在_rootfs目录下。
I) 创建目录
mkdir dev etc etc/dropbear etc/init.d mnt opot proc root sys tmp var var/log var/www
II) 创建配置文件etc/fstab,内容为:
LABEL=/ / tmpfsdefaults 00 none /dev/ptsdevptsgid=5,mode=62000 none /procproc defaults00 none /syssysfsdefaults00 none /tmptmpfsdefaults 00
III) 创建配置文件etc/inittab,内容为:
::sysinit:/etc/init.d/rcS # /bin/ash # # Start an askfirst shell on the serial ports ttyPS0::respawn:-/bin/ash # What to do when restarting the init process ::restart:/sbin/init # What to do before rebooting ::shutdown:/bin/umount -a -r
IV) 创建配置文件etc/passwd,内容为:
:root:$1 $qC.CEbjC $SVJyqm.IG.gkElhaeM.FD0:0:0:root:/root:/bin/sh
V) 创建配置文件etc/init.d/rcS,内容为:
#!/bin/shecho “Starting rcS …” echo “++ Mounting filesystem”mount –t proc none /procmount –t sysfs none /sysmount –t tmpfs none /tmp echo “++ Setting up mdev”echo /sbin/mdev > /proc/sys/kernel/hotplugmdev –s mkdir –p /dev/ptsmkdir –p /dev/i2cmount –t devpts devpts /dev/pts echo “++ Starting telnet daemon”telnetd –l /bin/sh echo “++ Starting http daemon”httpd –h /var/www echo “++ Starting ftp daemon”tcpsvd 0:21 ftpd ftpd –w /& echo “++ Starting dropbear (ssh) daemon”dropbear echo “rcS Complete”
VI) 为rcS赋予root的执行权限
chmod 755 etc/init.d/rcS sudo chown root:root etc/init.d/rcS
2.5 制作镜像文件ramdisk.image
创建镜像文件ramdisk16M.image,并设置大小为16M,文件系统格式为ext2:
cd ~ dd if=/dev/zero of=ramdisk16M.image bs=1024 count=16384 mke2fs -F ramdisk16M.image -L "ramdisk" -b 1024 -m 0 tune2fs ramdisk16M.image -i 0 chmod 777 ramdisk16M.image
大小可以按照需要自己调整,但是最好不要超过32M;此外文件系统的大小最好和内核配置的大小相同,以避免发生匹配错误。不过照我的使用情况来看,内核设置为16M时,8M和16M的文件系统都能够正常启动,但还是建议二者匹配。
创建ramdisk目录,将ramdisk16M.image 挂载到该目录下,
mkdir ramdisk sudo mount -o loop ramdisk16M.image ramdisk/
接下来,只需要将_rootfs目录下的内容全部拷贝到ramdisk下即可。
sudo cp -R /home/devel/_rootfs/* ramdisk
注意,这里cp的参数一定是R而非r。
这样,这个镜像文件的内容就是_rootfs目录下的内容了。将其卸载就可。
sudo umount ramdisk/
到此,根文件系统镜像文件ramdisk16M.image 制作完成,将其压缩。
gzip -9 ramdisk16M.image
生成ramdisk16M.image.gz文件。
2.6 生成uramdisk.image.gz
使用mkimage命令为ramdisk.img.gz添加一些头部信息,生成uramdisk.image.gz,否则uboot将提示ramdisk格式错误。
使用如下命令生成uramdisk.image.gz
mkimage -n 'uboot ext2 ramdisk' -A arm -O linux -T ramdisk -C gzip -d ramdisk16M.image.gz uramdisk.image.gz
将生成的uramidisk.image.gz拷贝到TF卡,即可使用。
2.7 由uramdisk.image.gz生成ramdisk.img.gz
假如手上有一个uramdisk.image.gz的文件系统,想获取其内部的内容,该怎么办呢?
由于mkimage工具是在ramdisk.img.gz的头部添加了64字节的uboot信息来生成uramdisk.image.gz(破坏了压缩格式),所以uramdisk.image.gz是无法直接解压。可以直接使用Uedit32编辑器删除掉uramdisk.image.gz头部的64字节,然后重命名为ramdisk.img.gz。此时就可以使用gunzip解压为ramdisk.img,再进行挂载就可以修改镜像文件了。
还有一种方法更加快捷,使用的是Linux shell操作:
dd if=uramdisk.img of=ramdisk.img.gz skip=64 bs=1
gunzip ramdisk.img.gz
mkdir ramdisk; cd ramdisk
cpio -i < ../ramdisk.img
上两种方法均是从网上查找,尚未验证。
参考文献:
http://xilinx.eetrend.com/blog/8663
http://www.cnblogs.com/surpassal/archive/2012/12/19/zed_lab7.html