Vela 文件系统源码学习

概述

本文档主要介绍 Vela 操作系统中文件操作(open、read、write、close)的主要流程。

文件系统整体架构

Vela 系统采用 VFS(Virtual File System) 架构,主要包含:

  1. VFS 层 - 提供统一的文件操作接口

  2. 具体文件系统实现(FAT、PROCFS、TMPFS等)

  3. 设备驱动层

文件系统相关的重要数据结构:

  • struct inode - 文件系统节点,代表文件/目录

  • struct file - 打开文件实例

  • struct file_operations - 文件操作方法集

  • struct mountpt_operations - 挂载点操作方法集

open() 调用流程

  1. 应用层调用 open()

  2. 进入系统调用 nx_open()

  3. 调用 inode_search() 查找路径对应的 inode

  4. 如果是普通文件:

    • 调用对应文件系统的 open 操作(如 fat_open)

    • 分配 file 结构体,关联 inode

  5. 如果是设备文件:

    • 调用设备驱动的 open 操作

    • 关联驱动的 file_operations

  6. 返回文件描述符

open() 详细调用流程

1. 系统调用入口

应用程序调用open()后,进入系统调用层:

int open(const char *path, int oflags, ...) 
  -> int nx_open(const char *path, int oflags, mode_t mode)
    -> int file_open(const char *path, int oflags, mode_t mode)
      -> int file_vopen(struct file *filep, const char *path, int oflags, mode_t mode)

2. 路径解析与inode查找

在file_vopen()中,首先需要解析路径找到对应的inode:

  1. 调用inode_search()开始查找:

SETUP_SEARCH(&desc, path, false);  // 初始化查找描述符
ret = inode_find(&desc);           // 开始查找inode
  1. inode_find()内部调用_inode_search():

    • 从根节点(g_root_inode)开始搜索

    • 按路径组件逐级遍历inode树

    • 支持软链接和挂载点的处理

  2. 查找过程中的关键步骤:

    • 比较当前节点名与路径组件

    • 处理特殊情况(软链接、挂载点)

    • 返回找到的inode及相关信息

  3. inode_search返回结果包含:

    • node: 找到的目标inode

    • peer: 同级前一个节点

    • parent: 父节点

    • relpath: 挂载点内的相对路径

3. 文件打开处理

根据找到的inode类型执行不同的打开操作:

  1. 设备驱动文件:

if (INODE_IS_DRIVER(inode)) {
    // 调用驱动的open方法
    ret = inode->u.i_ops->open(filep);
}
  1. 块设备文件:

if (INODE_IS_BLOCK(inode)) {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay_515

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值