jffs2和yaffs2文件系统
一,JFFS2
JFFS:1999
Journalling Flash File System, Version 2:2001-9-23,Linux 2.4.10
主要用于NOR Flash,可用于NAND Flash
1. 特性:
掉电保护与损耗平衡
垃圾回收机制
CRC循环冗余校验机制
挂载时间与内存消耗跟文件系统的大小成正比:文件系统越大,越慢,消耗越多 ————> 很差的扩展性
挂载需要进行全盘扫描,挂载一个 16M 的闪存有时需要半分钟以上的时间
在实际应用中,JFFS2 最大能用在 128M 的闪存上
二,YAFFS2
YAFFS:2002
Yet Another Flash File System, Version 2:2003
只能用于NAND Flash, YAFFS1支持512Bytes/Page的NAND Flash;YAFFS2支持2kBytes/Page的NAND Flash.
1.特性:
储存资料的基本单位是Chunk:Page
支持YAFFS/Direct使用:可以不需要VFS,甚至操作系统支持
ECC冗余校验机制
纠正单比特错误和检测双比特错误,而且计算速度很快,但对1比特以上的错误无法纠正,对2比特以上的错误不保证能检测。
更快的挂载速度,更少的内存使用
512B/page ————> 4KB RAM/1MB NAND
2KB/Page ————> 1KB RAM/1MB NAND
JFFS与YAFFS都是日志结构文件系统(LFS),保障了数据的可靠性与安全性,可以恢复数据。
一般来说,对于小于64MB的NAND Flash,可以选用JFFS2;如果超过64MB,用YAFFS2比较合适
三,jffs2文件系统镜像制作
1、工具安装
sudo apt-get install mtd-utils
命令:mkfs.jffs2
2、镜像制作
信息收集:
Flash的页大小、擦除块大小
mkfs.jffs2 [options]
主要选项:
-p, --pad[=SIZE] 使用0xff填充文件系统到指定大小,不指定则只填充完最后一个擦除块
-r, -d, --root=DIR 使用指定的目录内容构建文件系统(default: cwd)
-s, --pagesize=SIZE 使用指定的页大小(最大数据节点大小) (default: 4KiB)
-e, --eraseblock=SIZE 指定擦除块的大小 (default: 64KiB)
-c, --cleanmarker=SIZE 擦除标记的大小 (default 12)
-m, --compr-mode=MODE 选择压缩模式(default: priortiry)
-x, --disable-compressor=COMPRESSOR_NAME 禁用指定的压缩算法
-X, --enable-compressor=COMPRESSOR_NAME 启用指定的压缩算法
-y, --compressor-priority=PRIORITY:COMPRESSOR_NAME 设置压缩算法的优先级
-L, --list-compressors 列出可用的压缩算法
-t, --test-compression 测试压缩算法
-n, --no-cleanmarkers 不添加擦除标记到擦除块
-o, --output=FILE 指定文件系统镜像名称(default: stdout)
-l, --little-endian 创建一个小端的文件系统
-b, --big-endian 创建一个大端的文件系统
-q, --squash 压缩权限和设置所有文件的拥有者为root
-U, --squash-uids 设置所有文件的拥有者为root
-P, --squash-perms 压缩所有文件的权限
四,yaffs2文件系统镜像制作
1、获取yaffs2源码
git clone git://www.aleph1.co.uk/yaffs2
从源码中编译制作工具:
cd yaffs2/utils
make
error: unknown type name ‘u8’
error: unknown type name ‘u32’
如果出现以上错误,修改yportenv.h文件,增加:#define CONFIG_YAFFS_DEFINES_TYPES
制作工具:
mkyaffs2image: YAFFS2(2KB/page)
mkyaffsimage: YAFFS(512B/page)
2、镜像制作
mkyaffs2image dir image_file [convert]
以上所有文件系统只能烧录使用,不能在宿主机上进行挂载