rtems文件系统(2)

看到rtems手册上写pathname evaluation process 路径评估过程,因为对文件系统理解不多。暂时理解为实现文件系统时需要考虑的功能------- 路径的检查功能

在 RTEMS 文件系统结构下的路径检查处理包括三部分:

1)路径检查handler函数 

2)跨越挂载点的路径检查

3)系统节点信息表数据结构 

1:路径检查函数包括 patheval()和 evalformake()两个。这两个函数在源码中没有查到。(why?)

路径检查对文件系统来说是特定的。每个文件系统需要提供上述两个routine。路径检查功能对于文件系统十分重要 ,通过它们来获取开始检查的节点位置和待检查的路径名。

2:如果文件系统支持挂载功能,那么路径检查函数还需要有处理跨越挂载点的能力。检查函数要检查名字一直追溯到挂载的新的文件系统的第一个目录node,并且要在文件系统调用检查函数之前就处理完结束字符 。一个指向名字还未被检查的部分的指针,和新文件系统的root node( 从挂载表入口获得 )一起传递给已成功挂载的文件系统检查函数 。

3:文件系统存放信息结构体(rtems_filesystem_location_info_t) 包含了识别该node的全部信息RTEMS通用文件系统代码定义了两个全局的rtems_filesystem_location_info_t结构,包括 rtems_filesystem_root和rtems_filesystem_current 结构。在初始化时,这两个结构都被定义为基本文件系统的根节点 ,当执行了 chdir 命令以后,rtems_filesystem_current 结构就被定位到命令所指向的位置 。

检查函数首先指向路径名的第一个字符,判断是否为有效分隔符,判断为真,就将 rtems_filesystem_root结构作为检查的起始节点,否则从rtems_filesystem_current结构开始检查。因此,有效的rtems_filesystem_location_info_t给到检查函数去开始检查,检查函数会依据解析出来的名称对节点的结构进行必要的修改。

下面结构体在cpukit/include/rtems/fs.h中定义,4.11.2源码中定义和下面不太一样。应该是文档没有更新吧。我按照源码上面的分析吧

typedef struct rtems_filesystem_location_info_tt {
   rtems_chain_node mt_entry_node;
   void* node_access;
   void* node_access_2;
   const rtems_filesystem_file_handlers_r  *handlers;
   rtems_filesystem_mount_table_entry_t    *mt_entry;
} rtems_filesystem_location_info_t;


node_access:文件系统具体的,一个文件系统可以在这个位置定义和存储任何可以识别该节点的必要信息,一般用于存放文件系统的检查routine。对于文件系统的root node,文件系统的初始化routine应该放在这里,应该一直保持有效,直到文件系统实例被unmounted。

handlers:定义了routine的集合,在一个文件系统中根据节点类型,这些routines可以被改变。通过mount table作为初始值,可以被检查routine改为期望的状态。


mt_entry:文件系统实例在mount table的入口


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值