1.概述
yaffs2是yaffs的改进,主要是为了支持2KB pagesize的Nand Flash。本文主要探究yaffs2在linux中的初始化以及挂载过程。
2.初始化过程
linux要使用yaffs2文件系统,或者说要支持yaffs文件系统,首先要再内核配置环节选择支持yaffs(当然如果内核源码内没有yaffs,还需要完成移植的过程)。
首先看到yaffs_vfs.c这个文件,它的内容是yaffs和虚拟文件系统关联。这是一个内核模块组建,可以看到有module_init(init_yaffs_fs)函数。因此系统启动的时候就会去执行这里的初始化函数。
static int __init init_yaffs_fs(void)
这个函数做了两件事情,一个是定义了proc接口。用于生成/proc/yaffs节点,可以通过cat /proc/yaffs查看yaffs的信息。
my_proc_entry = create_proc_entry("yaffs",
S_IRUGO | S_IFREG, YPROC_ROOT);
if (my_proc_entry) {
my_proc_entry->write_proc = yaffs_proc_write;
my_proc_entry->read_proc = yaffs_proc_read;
my_proc_entry->data = NULL;
} else {
return -ENOMEM;
}
另外一件事情就是注册文件系统了,调用函数register_filesystem,来实现和Linux虚拟文件系统的对接。实际操作了struct file_system_type yaffs_fs_type结构体。把它加入链表什么的。该结构体内容是:
static struct file_system_type yaffs2_fs_type = {
.owner = THIS_MODULE,
.name = "yaffs2",
.get_sb = yaffs2_read_super,
.kill_sb = kill_block_super,
.fs_flags = FS_REQUIRES_DEV,
};
是定义了超级块的操作函数,读取和销毁超级块。还有定义了文件系统名称name等等。
注册完成后,Linux算是已经支持yaffs文件系统了,可以通过cat /proc/filesystem来查看linux支持的所有文件系统。
3.mount过程
mount命令本身是一个应用程序,还是比较复杂的,这里先不讨论。我们来看,执行mount命令来挂载yaffs文件系统的时候(类似mount -t yaffs2 /dev/mtdblock9 /mnt),yaffs做了什么工作。