欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

jffs2文件系统六种内核结构-jffs2_raw_inode,jffs2_raw_dirent

程序员文章站 2022-06-10 10:36:51
六种内核结构jffs2_raw_inodejffs2_raw_inode内核数据结构struct jffs2_raw_inode{jint16_t magic; /* A constant magic number. */jint16_t nodetype; /* == JFFS2_NODETYPE_INODE */jint32_t totlen; /* Total length of this node (inc data, etc.) */jint32_t...


六种内核结构-jffs2_raw_inode,jffs2_raw_dirent


jffs2_raw_inode

内核数据结构

struct jffs2_raw_inode { jint16_t magic; /* A constant magic number.  */ jint16_t nodetype; /* == JFFS2_NODETYPE_INODE */ jint32_t totlen; /* Total length of this node (inc data, etc.) */ jint32_t hdr_crc; jint32_t ino; /* Inode number.  */ jint32_t version; /* Version number.  */ jmode_t mode; /* The file's type or mode.  */ jint16_t uid; /* The file's owner.  */ jint16_t gid; /* The file's group.  */ jint32_t isize; /* Total resultant size of this inode (used for truncations)  */ jint32_t atime; /* Last access time.  */ jint32_t mtime; /* Last modification time.  */ jint32_t ctime; /* Change time.  */ jint32_t offset; /* Where to begin to write.  */ jint32_t csize; /* (Compressed) data size */ jint32_t dsize; /* Size of the node's data. (after decompression) */ __u8 compr; /* Compression algorithm used */ __u8 usercompr; /* Compression algorithm requested by the user */ jint16_t flags; /* See JFFS2_INO_FLAG_* */ jint32_t data_crc; /* CRC for the (compressed) data.  */ jint32_t node_crc; /* CRC for the raw inode (excluding data)  */ __u8 data[0]; }; 

这个数据结构是用来描述文件属性,比如修改时间,文件节点大小等,是存在flash中的,在flash中后面跟着是这个节点的数据。flash中是存在压缩的数据,在数据结构中用csize表示。dsize代表的是未压缩的数据。

名称 含义
magic 校验头 JFFS2_MAGIC_BITMASK 0x1985
nodetype 节点类型 JFFS2_NODETYPE_INODE
totlen 节点数据结构大小加上压缩数据大小
hdr_crc 前面三个数据校验和
ino 文件的节点号,文件所有节点共用一个节点号
version 节点版本,文件不同的节点有不同的版本,相同的数据可以拥有不同节点就有不同版本
mode 文件类型或者文件模式
offset 在文件中的偏移位置
csize 压缩后的大小
dsize 未压缩的大小
compr 压缩方式
data_crc 压缩数据的crc校验值
node_crc 裸节点数据结构crc校验值
data[0] 具体数据

jffs2_raw_dirent

struct jffs2_raw_dirent { jint16_t magic; jint16_t nodetype; /* == JFFS2_NODETYPE_DIRENT */ jint32_t totlen; jint32_t hdr_crc; jint32_t pino; jint32_t version; jint32_t ino; /* == zero for unlink */ jint32_t mctime; __u8 nsize; __u8 type; __u8 unused[2]; jint32_t node_crc; jint32_t name_crc; __u8 name[0]; } 

在linux系统中目录也是文件,上面结构体用来描述目录和文件名。同样该结构体存在存储介质上,例如flash上。pino文件目录标号,同一个目录下的文件pino相同,同一文件的ino相同,version不同。

名称 含义
magic 同inode
nodetype JFFS2_NODETYPE_DIRENT 节点类型
totlen 节点数据总长
hdr_crc 头部crc校验值
pino 文件目录编号
nsize 文件名称大小
name[0] 后面接着文件名称,已经预留了nsize大小

可阅读代码

/kernel/linux-5.5.3/fs/jffs2 
void __jffs2_dbg_dump_node(struct jffs2_sb_info *c, uint32_t ofs) 

本文地址:https://blog.csdn.net/jiujiujiuqiuqiuqiu/article/details/107825905