JFFS2文件系统

JFFS2的全名为JournallingFlashFileSystemVersion2(闪存日志型文件系统第2版),其功能就是管理在MTD设备上实现的日志型文件系统。与其他的存储设备存储方案相比,JFFS2并不准备提供让传统文件系统也可以使用此类设备的转换层。它只会直接在MTD设备上实现日志结构的文件系统。JFFS2会在安装的时候,扫描MTD设备的日志内容,并在RAM中重新建立文件系统结构本身。
除了提供具有断电可靠性的日志结构文件系统,JFFS2还会在它管理的MTD设备上实现“损耗平衡”和“数据压缩”等特性。

为了更好的了解JFFS2文件系统,我们首先来创建一个目录rootfs,里面包含一些目录和一些文件,其中001文件内容为111,最终打包为一个JFFS2文件系统映像。

命令如下:

mkfs.jffs2 -r rootfs -o rootfs.jffs2

使用16进制工具查看rootfs.jffs2文件:

解析过程

序号偏移说明
10x00-0x01magic,值为0x1985
20x02-0x03node_type,值为0x2003
30x04-0x07totlen,值为0x0C
40x08-0x0Bhdr_crc,值为0xE41EB0B1,即计算0-7字节的crc
50x0C-0x0Dmagic,值为0x1985
60x0E-0x0Fnode_type,值为0xE001,定义为jffs2_raw_dirent
70x10-0x13totlen,值为0x2B
80x14-0x17hdr_crc,值为0x7D266EE6
90x18-0x1Bpino,值为0x01
100x1C-0x1Fversion,值为0x00
110x20-0x23ino,值为0x02
120x24-0x27mctime 创建时间,值为0x6235256d,即计算0x0C-0x13字节的crc
130x28nsize,值为0x03
140x29type,值为0x08
150x2A-0x2B保留数据
160x2C-0x2Fnode_crc,值为0xF4D44AED
170x30-0x33name_crc,值为0xAAF3D359
180x34-0x37name,字符串为001,为了偶数对齐,以0xFF对齐
190x38-0x39magic,值为0x1985
200x3A-0x3Bnode_type,值为0xE002,定义为jffs2_raw_inode
210x3C-0x3Ftotlen,值为0x48
220x40-0x43hdr_crc,值为0xd22144a5
230x44-0x47ino,值为0x02
240x48-0x4Bversion,值为0x01
250x4C-0x4Fmode,值为0x81b4
260x50-0x51uid,值为0x03E9(1001)
270x52-0x53gid,值为0x03E9(1001)
280x54-0x57isize,值为0x04
290x58-0x5Batime 访问时间,值为0x6235256d
300x5C-0x5Fmtime 最后一次修改时间,值为0x6235256d
310x60-0x63ctime 修改时间,值为0x6235256d
320x64-0x67offset,值为0x00
330x68-0x6Bcsize (压缩)数据大小,值为0x04
340x6C-0x6Fdsize (解压后)数据大小,值为0x04
350x70compr,值为0x00,即压缩方式为不压缩
360x71usercompr,值为0x00
370x72-0x73flags,值为0x00
380x74-0x77data_crc 数据crc,值为0x4bb6fecf
390x78-0x7Bnode_crc,值为0x4d839ca6
400x7C-0x7Fdata,数据为\x31\x31\x31\x0A

压缩方式定义如下

序号定义
10x00JFFS2_COMPR_NONE
20x01JFFS2_COMPR_ZERO
30x02JFFS2_COMPR_RTIME
40x03JFFS2_COMPR_RUBINMIPS
50x04JFFS2_COMPR_COPY
60x05JFFS2_COMPR_DYNRUBIN
70x06JFFS2_COMPR_ZLIB
80x07JFFS2_COMPR_LZO
90x08JFFS2_COMPR_LZMA

校验算法(python实现):

import binascii

def mtd_crc(data):
    return (binascii.crc32(data, -1) ^ -1) & 0xFFFFFFFF

参考链接:

https://www.zhiwanyuzhou.com/download/Datasheet/rootfs/jffs2.pdf

https://github.com/sviehb/jefferson

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注