OpenHarmony开发者论坛

标题: 如何移植OpenOarmony3.0.2LTS的文件系统?(轻量系统) [打印本页]

作者: paopaozhi    时间: 2023-12-12 11:28
标题: 如何移植OpenOarmony3.0.2LTS的文件系统?(轻量系统)
[md]# 如何移植OpenHarmony3.0.2LTS的文件系统?(轻量系统)

想请问如何使用OpenHarmony的文件系统?

关于文件系统时如何实现的?

如果想要实现写一个app然后多个开发板都能去使用,如何实现?
[/md]
作者: 深开鸿_王石    时间: 2023-12-12 15:18
文件系统是kernel部分呢,liteos_a的内容主要来源于nuttx,资料不少,可以找找;至于app,还是arkui框架,这部分和富设备差别不大,只是需要注意是不是有些不支持,如果你不需要界面,那就完全没区别了
作者: dragon    时间: 2023-12-12 22:09
标题: 如何移植OpenOarmony3.0.2LTS的文件系统?(轻量系统)
Q:如何移植 OpenHarmony3.0.2LTS 的文件系统?(轻量系统)
A:从3.0.2移植到哪里去?


Q:想请问如何使用 OpenHarmony 的文件系统?(姑且认为也是轻量系统)
A:
轻量系统的数据持久化方法,包括键值存储和文件操作两种方式。它们在公共基础库子系统中,可被各业务子系统及上层应用使用。
键值存储API列表:
接口名                        描述
UtilsGetValue                根据key获取对应数据项
UtilsSetValue                用于存储/更新key对应数据项
UtilsDeleteValue        删除key对应数据项

文件操作API列表:
接口名                        描述
UtilsFileOpen                打开或创建文件
UtilsFileClose                关闭文件
UtilsFileRead                读取特定长度的文件数据
UtilsFileWrite                向文件写入特定大小的数据
UtilsFileDelete                删除指定文件
UtilsFileStat                获取文件大小
UtilsFileSeek                重新定位文件读/写偏移量
UtilsFileCopy                将源文件复制一份并存储到目标文件
UtilsFileMove                将源文件移动到指定目标文件


Q:关于文件系统是如何实现的?(姑且认为也是轻量系统)
A:
键值存储具体实现:以key为文件名,将value保存到文件中,而非键值数据库中。所以键值存储调用的是文件操作,如下图。
(, 下载次数: 14)

(, 下载次数: 17)


文件操作具体实现:这个帮你追一个调用层级,例如UtilsFileOpen,具体如下。
(, 下载次数: 17)

(, 下载次数: 15)

注意device\hisilicon\hispark_pegasus\sdk_liteos\include\hi_fs.h之下就没有开源了:

(, 下载次数: 14)

往静态库里面追,device\hisilicon\hispark_pegasus\sdk_liteos\build\libs\hi3861\release\factory\libsystem.a:
(, 下载次数: 15)

用IDA反汇编,里面的hi_fs.o:
(, 下载次数: 12)

调用了LOS_Open:
(, 下载次数: 17)

device\hisilicon\hispark_pegasus\sdk_liteos\build\libs\hi3861\release\factory\liblitekernel_flash.a里面的los_vfs.o:

(, 下载次数: 12)

LOS_Open调用了SPIFFS_open:

(, 下载次数: 14)

device\hisilicon\hispark_pegasus\sdk_liteos\build\libs\libspiffs.a里面的spiffs_hydrogen.o:

(, 下载次数: 16)

从这里开始就是具体实现了,以spiffs_object_create为例,继续追:
(, 下载次数: 15)

device\hisilicon\hispark_pegasus\sdk_liteos\build\libs\libspiffs.a里面的spiffs_nucleus.o:

(, 下载次数: 17)

到这一级基本上没什么extern的函数了
(, 下载次数: 14)

(, 下载次数: 13)


Q:如果想要实现写一个 app 然后多个开发板都能去使用,如何实现?

A:缩小问题范围,只是针对文件系统和KV存储的话,如果不跨CPU,那么把相关c和h打包带走即可;如果跨cpu,需要自己进行移植(把接口打通)。

(以上反编译只用于学习目的)





欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5