Linux 文件系统原理 第1章 概述 要理解linu x 的文件系统,要从理解虚拟文件系统(VFS,Virtu al Filesy stem)开始。其结构可以用图表 1 来描述。 图表 1 第2 章 虚拟文件系统 2 .1 它到底是什么? 虚拟文件系统是Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口。它也提供了内核中的一个抽象功能,允许不同的文件系统共存。 2 .2 工作方式概述 2 .2 .1 注册和安装一个文件系统 如果你想在内核中支持一种新的文件系统的话,你所需要做的仅仅是调用函数register_filesystem()。你向内核中传递一个描述文件系统实现 的结构(struct filesystem), 此结构将被加入到内核的支持文件系统表中去。你可以运行下面的命令: % cat /proc/filesystems 这样可以看到你的系统支持哪些文件系统。 内核模块必须提供两个用于加载和卸载时调用的接口,这两个接口由两个固定的宏引出,分别为module_init(),module_exit()。文件系统在作为模块被加载到内核时,调用register_filesystem(),把自己注册为一种文件系统。在模块被卸载时,调用unregister_filesystem()从内核中注消。以JFFS 为例: // 定义一种文件系统jffs_fs_type,其名称为“JFFS” static DECLARE_FSTYPE_DEV(jffs_fs_type, "jffs", jffs_read_super); static int __init init_jffs_fs(void) { printk(KERN_INFO "JFFS version " JFFS_VERSION_STRING ", (C) 1999, 2000 Axis Communications AB\n"); #ifdef CONFIG_JFFS_PROC_FS jffs_proc_root = proc_mkdir("jffs", proc_root_fs); #endif fm_cache = kmem_cache_create("jffs_fm", sizeof(struct jffs_fm), 0, SLAB_HWCACHE_ALIGN, NULL, NULL); node_cache = kmem_cache_create("jffs_node",sizeof(struct jffs_node), 0, SLAB_HWCACHE_ALIGN, NULL, NULL); // 注册文件系统 return register_filesystem(&jffs_fs_type); } static void __exit exit_jffs_fs(void) { // 注消文件系统 unregister_filesystem(&jffs_fs_type); kmem_cache_destroy(fm_cache); kmem_cache_destroy(node_cache); } // 引出模块的加载和卸载时调用的接口 module_init(init_jffs_fs) module_exit(exit_jffs_fs) 当一个mount 请求出现时,VFS 将会为特定的文件系统调用相应的方法。安装点的dentry 结构将会被改为指向新...