更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
vfs_init.c 文件参考

http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-bundles-fs-virtual.html 更多...

浏览源代码.

函数

void los_vfs_init (void)
 Initializes the vfs filesystem 更多...
 
 LOS_MODULE_INIT (los_vfs_init, LOS_INIT_LEVEL_KMOD_BASIC)
 

详细描述

http://weharmonyos.com/openharmony/zh-cn/device-dev/kernel/kernel-small-bundles-fs-virtual.html

VFS是Virtual File System(虚拟文件系统)的缩写,它不是一个实际的文件系统,而是一个异构文件系统之上的软件粘合层,
为用户提供统一的类Unix文件操作接口。

由于不同类型的文件系统接口不统一,若系统中有多个文件系统类型,访问不同的文件系统就需要使用不同的非标准接口。
而通过在系统中添加VFS层,提供统一的抽象接口,屏蔽了底层异构类型的文件系统的差异,使得访问文件系统的系统调用不用
关心底层的存储介质和文件系统类型,提高开发效率。

OpenHarmony内核中,VFS框架是通过在内存中的树结构来实现的,树的每个结点都是一个inode结构体。
设备注册和文件系统挂载后会根据路径在树中生成相应的结点。VFS最主要是两个功能:
    查找节点。
    统一调用(标准)。
版本
作者
weharmonyos.com | 鸿蒙研究站 | 每天死磕一点点
日期
2021-11-22

在文件 vfs_init.c 中定义.

函数说明

◆ LOS_MODULE_INIT()

LOS_MODULE_INIT ( los_vfs_init  ,
LOS_INIT_LEVEL_KMOD_BASIC   
)

◆ los_vfs_init()

void los_vfs_init ( void  )

Initializes the vfs filesystem

Description:
This API is used to initializes the vfs filesystem
注意
  • Called only once, multiple calls will cause file system error.
参数
none
返回值
none
Dependency:
  • fs.h: the header file that contains the API declaration.
参见
NULL

在文件 vfs_init.c70 行定义.

71{
72 uint retval;
73 static bool g_vfs_init = false;
74 if (g_vfs_init) {
75 return;
76 }
77
78#ifdef LOSCFG_FS_FAT_DISK //两个自旋锁
79 spin_lock_init(&g_diskSpinlock);
80 spin_lock_init(&g_diskFatBlockSpinlock);
81#endif
82 files_initialize();
83 files_initlist(&tg_filelist);
84
85 retval = VnodesInit();//索引节点初始化
86 if (retval != LOS_OK) {
87 PRINT_ERR("los_vfs_init VnodeInit failed error %d\n", retval);
88 return;
89 }
90
91 retval = PathCacheInit();//路径缓存初始化
92 if (retval != LOS_OK) {
93 PRINT_ERR("los_vfs_init PathCacheInit failed error %d\n", retval);
94 return;
95 }
96 retval = VnodeHashInit();//哈希列表初始化
97 if (retval != LOS_OK) {
98 PRINT_ERR("los_vfs_init VnodeHashInit failed error %d\n", retval);
99 return;
100 }
101
102 retval = VnodeDevInit();
103 if (retval != LOS_OK) {
104 PRINT_ERR("los_vfs_init VnodeDevInit failed error %d\n", retval);
105 return;
106 }
107
108 g_vfs_init = true;
109}
spinlock_t g_diskFatBlockSpinlock
磁盘Fat块自旋锁
Definition: disk.c:83
spinlock_t g_diskSpinlock
磁盘自锁锁
Definition: disk.c:82
int PathCacheInit(void)
Definition: path_cache.c:58
int VnodesInit(void)
Definition: vnode.c:91
int VnodeDevInit(void)
设备初始化,设备结点:/dev目录下,对应一个设备,如/dev/mmcblk0
Definition: vnode.c:627
int VnodeHashInit(void)
Definition: vnode_hash.c:44
函数调用图:
这是这个函数的调用关系图: