cuter

【原创】为Miz702制作ramdisk文件系统(下)

0
阅读(961) 评论(0)

本文接上一篇博文《【原创】为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

wps5066.tmp

 

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”

wps5095.tmp

VI) 为rcS赋予root的执行权限

chmod 755 etc/init.d/rcS
sudo chown root:root etc/init.d/rcS

wps5096.tmp


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文件。

wps50A7.tmp

wps50B8.tmp


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