• Lv0
    粉丝1

积分16 / 贡献0

提问4答案被采纳0文章1

如何移植OpenOarmony3.0.2LTS的文件系统?(轻量系统)

paopaozhi 显示全部楼层 发表于 2023-12-12 11:28:26

如何移植OpenHarmony3.0.2LTS的文件系统?(轻量系统)

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

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

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

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论2

深开鸿_王石

沙发 发表于 2023-12-12 15:18:04
文件系统是kernel部分呢,liteos_a的内容主要来源于nuttx,资料不少,可以找找;至于app,还是arkui框架,这部分和富设备差别不大,只是需要注意是不是有些不支持,如果你不需要界面,那就完全没区别了

dragon

板凳 发表于 2023-12-12 22:09:40

如何移植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保存到文件中,而非键值数据库中。所以键值存储调用的是文件操作,如下图。
微信截图_20231212131951.png

微信截图_20231212132040.png


文件操作具体实现:这个帮你追一个调用层级,例如UtilsFileOpen,具体如下。
微信截图_20231212132352.png

微信截图_20231212132601.png

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

微信截图_20231212132853.png

往静态库里面追,device\hisilicon\hispark_pegasus\sdk_liteos\build\libs\hi3861\release\factory\libsystem.a:
微信截图_20231212211318.png

用IDA反汇编,里面的hi_fs.o:
微信截图_20231212211407.png

调用了LOS_Open:
微信截图_20231212211557.png

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

微信截图_20231212211924.png

LOS_Open调用了SPIFFS_open:

微信截图_20231212211959.png

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

微信截图_20231212212800.png

从这里开始就是具体实现了,以spiffs_object_create为例,继续追:
微信截图_20231212213024.png

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

微信截图_20231212213356.png

到这一级基本上没什么extern的函数了
微信截图_20231212213538.png

微信截图_20231212213601.png


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

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

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

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部