1# 移植文件子系统 2 3 4utils部件可被各业务子系统及上层应用使用,依赖芯片文件系统实现,需要芯片平台提供文件打开、关闭、读写、获取大小等功能。 5 6 7## 移植指导 8 9OpenHarmony文件系统需要适配如下HAL层接口: 10 11 **表1** 文件打开或关闭 12 13| **接口名** | **描述** | 14| -------- | -------- | 15| HalFileOpen | 文件打开或创建新文件。 | 16| HalFileClose | 文件关闭。 | 17 18 **表2** 文件操作 19 20| **接口名** | **描述** | 21| -------- | -------- | 22| HalFileRead | 读文件。 | 23| HalFileWrite | 写文件。 | 24| HalFileDelete | 删除文件。 | 25| HalFileStat | 获取文件属性。 | 26| HalFileSeek | 文件查找。 | 27 28 厂商适配相关接口的实现,请参考OpenHarmony中file的接口和hal层适配接口的定义: 29 30``` 31//utils/native/lite/file 32├── BUILD.gn 33└── src 34 └── file_impl_hal 35 └── file.c #file接口 36``` 37 38 39``` 40//utils/native/lite/hals 41└── file 42└── hal_file.h #hal层接口头文件 43``` 44 45其中BUILD.gn的内容如下: 46 47 48``` 49import("//build/lite/config/component/lite_component.gni") 50 51static_library("native_file") { 52 sources = [ 53 "src/file_impl_hal/file.c", 54 ] 55 include_dirs = [ 56 "//utils/native/lite/include", 57 "//utils/native/lite/hals/file", 58 ] 59 deps = ["$ohos_vendor_adapter_dir/hals/utils/file:hal_file_static"] #依赖厂商的适配 60} 61 62lite_component("file") { 63 features = [ 64 ":native_file", 65 ] 66} 67``` 68 69从中可以看到厂商适配相关接口的存放目录应为“$ohos_vendor_adapter_dir/hals/utils/file”,且该目录下BUILD.gn文件中的目标应为hal_file_static。 70 71通常厂商可以采用下面三种方式适配hal层接口: 72 731. 直接flash读写,模拟文件的操作。 74 752. 使用littlefs或者fatfs文件系统进行适配,littlefs或者fatfs都是轻量级文件系统适配简单,其中OpenHarmony的“//thirdparty”目录下已有fatfs可供参考。 76 773. 使用厂商已有的文件系统进行适配。 78 79 80## 移植实例 81 821. “config.json”添加文件系统。 83 路径:“vendor/MyVendorCompany/MyProduct/config.json” 84 85 修改如下: 86 87 ``` 88 { 89 "subsystem": "utils", 90 "components": [ 91 { "component": "file", "features":[] } 92 ] 93 }, 94 ``` 95 962. 添加适配文件。 97 在“vendor/MyVendorCompany/MyProduct/config.json”文件中,vendor_adapter_dir配置项通常进行如下配置: 98 99 "vendor_adapter_dir": "//device/MyDeviceCompany/MyBoard/adapter"。 100 101 在该目录下进行UtilsFile接口适配: 102 103 104 ``` 105 hals/utils/file 106 ├── BUILD.gn 107 └── src 108 └── hal_file.c 109 ``` 110 111 其中BUILD.gn内容如下: 112 113 ``` 114 import("//build/lite/config/component/lite_component.gni") 115 static_library("hal_file_static") { #目标名 116 sources = [ "src/hal_file.c" ] #厂商适配的源文件 117 include_dirs = [ 118 "//utils/native/lite/hals/file", 119 ] 120 } 121 ``` 122