使用YAFFS2作为根文件系统

在我们的项目应用中,有较大的NAND FLASH,而RAM资源比较紧张。因此考虑使用NAND FLASH做为根文件系统,而不采用常见的ramdisk作为rootfs。
使用yaffs2作为根文件系统,需要注意两点:

一 内核启动参数

使用yaffs作为rootfs时,需要uboot提供如下启动参数给内核:
setenv bootargs mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rootfstype=yaffs2 rw

二 制作映像包

方法一

1,首先nfs方式启动linux。 
2,进入开发板linux shell里。 
3,擦除mtd1。 
eraseall /dev/mtd1
4,把nfs.tar.gz拷贝到/home/radionfs根目录下。 
5,挂载mtdblock1。 
mount –t yaffs2 /dev/mtdblock1 /mnt
6,解压根文件系统到mnt也就是写到mtdblock1.
cd /mnt
tar xvzf /nfs.tar.gz
7,卸载mtd1
umount /mnt
这样,我们的根文件系统就固化到nand里面了。
注:这样方式需要启动虚拟机,进入开发板linux之后才能操作,很不方便。同时在生产阶段效率很低。不推荐使用。

方法二

Yaffs2提供了一个mkyaffs2image的使用工具,可以直接把我们的根文件系统打包生成一个yaffs2的镜像,然后使用uboot烧入到nand flash中即可。这种方法不需要启动虚拟机和目标板上的linux系统。非常方便,速度也更快捷。

  1. 映像打包

使用root权限。 
./mkyaffs2image ?~/SAM9260/nfsroot/nfsroot-standard/ myroot
其中,
~/SAM9260/nfsroot/nfsroot-standard/是将要打包的yaffs目录 
Myroot 是打包以后的映像文件 
2,uboot烧写
Tftp 22000000 myroot
需要先擦除flash。
Nand erase 3c00000 size
nand write.yaffs 22000000 3c00000 e718c0(最后的是大小,需要使用下载后的字节,包含oob)
其中,
22000000是映像包下载后的地址 
3c00000是nand分区的起始地址 
e718c0这个是映像包的大小

三 修改

  1. yaffs2/utils/mkyaffs2image.c

160行,增加
char oobData[spareSize];
188行,增加
//return write(outFile,&pt,spareSize);
memset(oobData,0xFF,spareSize);
memcpy(&(oobData[2]),&pt,sizeof(yaffs_PackedTags2));
??? return write(outFile,oobData,spareSize);

#make
在当前目录下生成 mkyaffs2image

  1. uboot修改

具体见《uboot.doc》

你可能感兴趣的:(使用YAFFS2作为根文件系统)