需求:基于RK3308开发的镜像,用户分区(userdata)希望在烧写镜像的时候就全部初始化为0xFF,用户分区格式化为jffs2
实现方法:制作一个‘空’的,即全为0xFF的用户镜像,假设名称为sys_data.img,在烧写其他系统镜像的时候一同烧写
生成空的、指定大小的jffs2镜像
首先新建空文件夹,名称为jffs2
$ mkdir jffs2
然后执行如下命令:
$ mkfs.jffs2 -r jffs2 -o user_data.img -e 0x10000 --pad=0x050000 -s 0x1000 -n
Mkfs.jffs2各参数的意义如下:
-r:指定要做成image的目录名。
-o:指定输出image的文件名。
-e, --eraseblock=SIZE:每一块要擦除的block size,默认是64KB.要注意,不同的flash, 其block size会不一样。在没有加-e选项是,启动会出现以下错误:at91sam user.warn kernel: Empty flash at 0x00f0fffc ends at 0x00f10000。因此,若有类似的错误,加上-e选项,并配置nandflash的块大小,即可消除。
--pad(-p):用16进制来表示所要输出文件的大小,也就是fs.jffs2的大小,如果实际大小不足此设定的大小,则用0xFF补足。也可以不用此选项,生成的文件系统的大小跟本身大小一致,暂时还不知道有和妙用,但是加上后会少出现很多错误。很重要的是, 為了不浪費flash空間, 這個值最好符合flash driver所規劃的區塊大小。如果不足则使用0xff来填充补满。
-n,-no-cleanmarkers:指明不添加清楚标记(nandflash有自己的校检块,存放相关的信息)。如果挂载后会出现类似:CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0的警告,则加上-n就会消失。
-s, --pagesize=SIZE 节点页大小(默认: 4KiB)
查看:确实是全为0xff
$ hexdump -C user_data.img
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00050000