yaffs2 启动挂载流程

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做了什么工作。




你可能感兴趣的:(yaffs2 启动挂载流程)