filex移植步骤
因为使用的是oneos操作系统,实际上bsp和sd卡驱动程序,在rtos中已经得到了支持。因此,底层硬件的适配不是我们要着重关心的事情,需要注意的是:
- 函数 fx_system_initialize()实现FileX 的初始化
- 函数 fx_media_open 实现挂载 SD 卡功能,上电后仅调用一次,方便用户实现 FileX 驱动多个磁盘
- 函数 fx_media_close 实现卸载 SD 卡功能
- 函数 fx_directory_next_full_entry_find 实现文件浏览
- 函数 fx_file_create 用来创建文件
- 函数 fx_file_open 用来打开文件
- 函数 fx_file_close 用于关闭文件
- 函数 fx_file_seek 用来设置操作的起始位置
- 函数 fx_file_write 用来写入数据
- 函数 fx_file_delete 用于删除文件
- 函数 fx_media_flush 用于文件写入全部生效
- 函数 fx_directory_create 用于创建文件夹
- 函数 fx_directory_delete 用于删除文件夹
- 函数 fx_media_format 用于filex文件系统的格式化/初始化
对比一下vfs_fatfs.c里面适配的接口:
static const struct vfs_mops vfs_mops = {
.fs_name = "fatfs",
.m_mkfs = vfs_fat_mkfs, //fx_media_format
.m_mount = vfs_fat_mount, //fx_media_open
.m_statfs = vfs_fat_statfs,
.m_umount = vfs_fat_unmount, //fx_media_close
};
static const struct vfs_vops _fat_vops = {
.v_mkdir = vfs_fat_mkdir, //fx_directory_create
.v_opendir = vfs_fat_opendir,
.v_closedir = vfs_fat_closedir, //fx_directory_delete
.v_readdir = vfs_fat_readdir, //fx_directory_next_full_entry_find
.v_seekdir = vfs_fat_seekdir,
.v_telldir = vfs_fat_telldir,
.v_rename = vfs_fat_rename,
.v_unlink = vfs_fat_unlink, //fx_file_delete
.v_stat = vfs_fat_stat,
};
static const struct vfs_fops _fat_fops = {
.f_open = vfs_fat_open, //fx_file_create,fx_file_open
.f_close = vfs_fat_close, //fx_file_close
.f_read = vfs_fat_read, fx_file_read
.f_write = vfs_fat_write, //fx_file_write
.f_lseek = vfs_fat_lseek, //fx_file_seek
.f_sync = vfs_fat_sync, //fx_media_flush
.f_ftruncate = vfs_fat_ftruncate,
};
最重要的关注是什么?
- 类似fatfs的diskio.c,或者littlefs的lfs_io.c,filex也需要有自己的filex_io.c文件。
- 用于连接filex文件系统和底层存储设备。用来实现filex所需的底层磁盘I/O函数,包括获取磁盘状态、初始化磁盘、读扇区、写扇区和控制磁盘。这些函数为filex提供了对存储设备的基本访问功能。
- 类似fatfs的vfs_fatfs,或者littlefs的vfs_lfs.c,filex也需要有自己的vfs_filex.c文件。
- 用于将filex注册到rtos的vfs层,这样其它应用程序就可以通过标准的系统调用(如open、read、write、close等)来访问filex文件系统。
- 并且vfs_filex.c包含适配代码,将filex的API转换为操作系统下vfs层所期望的接口,隐藏了filex内部的具体实现细节。
因此,知道了要做的是什么?而后的开发工作就应该着重于:filex_io.c&&vfs_filex.c。但在这期间,我们也应了解filex的代码基本实现,因此,下一步查看filex的doc文件,以及filex的代码,需要进行,学习才能进步。
filex的文档地址:rtos-docs/rtos-docs/filex
先看看代码框架吧!!注意:在最新版本的filex,已经删除了对exfat的代码支持。
cmake 编译所需要的cmake文件
common
inc 源码对应的头文件
src filex的实现都在里面啦
docs 没有啥,就几张图片
port 里面有个重要的文件fx_port.h
sample 就是有个demo,可以参考一下如何使用filex的
script 都是sh文件,用于执行编译操作的
test 测试用例,写测试用例的时候可以参考下
总结一下就三点,其它都是无关紧要的:
- 源码都在:common
- 对filex的配置在port中的fx_port.h
- demo和测试用例在sample和test中