jffs2文件系统六种内核结构-jffs2_raw_inode,jffs2_raw_dirent
程序员文章站
2022-03-01 13:44:52
六种内核结构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