看到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;