新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 对ROMFS文件系统的分析和改进

对ROMFS文件系统的分析和改进

作者:时间:2012-03-26来源:网络收藏

3.的主要数据结构

的数据结构比较简单,主要有结构和文件结构两种数据结构。

结构如下:

struct romfs_super_block {

__u32 word0;

__u32 word1;

__u32 size;

__u32 checksum;

char name[0]; /* volume name */

};

该结构用于识别整个ROMFS,大小为512字节,word0初始值为'-','r','o','m',word1初始值为 '-','1','f','s',通过这两个字操作系统确定这是一个ROMFS文件系统。size字段用于记录整个文件系统的大小,理论上ROMFS大小最多可以达到4G。checksum是前512字节的校验和,用于确认整个文件系统结构数据的正确性。前面4个字段占用了16字节,剩下的都可以用作文件系统的卷名,如果整个首部不足512字节便用0填充,以保证首部符合16字节对齐的规则。

ROMFS的文件结构如下:

struct romfs_inode {

__u32 next; /* low 4 bits see ROMFH_ */

__u32 spec;

__u32 size;

__u32 checksum;

char name[0];

};

next 字段是下一个文件的偏移地址,该地址的后4位是保留的,用于记录文件模式信息,其中前两位为文件类型,后两位则标识该文件是否为可执行文件。因此 ROMFS用于文件寻址的字段实际上只有28bit,所以ROMFS中文件大小不能超过256M。spec字段用于标识该文件类型。目前ROMFS支持的文件类型包括普通文件,目录文件,符号链接,块设备和字符设备文件。size是文件大小,checksum是校验和,校验内容包括文件名,填充字段。 name是文件名首地址,文件名长度必须保证16字节对齐,不足的部分用可以0填充。

4.ROMFS的实现

在Linux系统中定义一个文件系统首先要定义相应的file_system_type以及读取超级块的函数。具体到ROMFS本身,这两个对象分别是romfs_fs_type和romfs_read_super,通过宏DECLARE_FSTYPE_DEV来实现对romfs_fs_type的定义以及初始化工作。此外还需要实现对目录,文件的读写操作。

在Linux对ROMFS的实现中,比较重要的数据结构如下:

//超级块操作表

static struct super_operations romfs_ops = {

read_inode: romfs_read_inode,

statfs: romfs_statfs,};

//页操作表

static struct address_space_operations romfs_aops = {

readpage: romfs_readpage};

//常规文件操作表

static struct file_operations romfs_dir_operations = {

read: generic_read_dir,

readdir: romfs_readdir,};

//索引节点操作表

static struct inode_operations romfs_dir_inode_operations = {

lookup: romfs_lookup,};



关键词: ROMFS 文件系统

评论


相关推荐

技术专区

关闭