【Openharmony】【4.0R】【LiteOS-A】fs.yml文件功能
编译Openharmony4.0R的时候,无论是hispark_taurus还是qemu_small_system_demo,我们按照一般教程写的“hello”程序,都自动打包进镜像内(例如在hispark_taurus,编译后需要烧录三个文件OHOS_Image.bin,rootfs.img,userfs.img,而qemu_small_system_demo中,会在out目录下生成smallmmc.img),启动相应系统后,可在系统的“/bin”目录下看到我们编译的可执行文件。
一直好奇这个文件是如何copy到镜像中供我们使用的,抽空看了下发现在"fs.yml"中有相应的设置。
fs.yml 作用
本人没有详细研究Openharmony相应的文档,个人感觉是“file system”的配置文件,vendor目录下每个产品几乎都有一个对应的fs.yml配置文件。这里借用hispark_taurus的fs.yml为例子对部分设置项进行简要说明(个人理解的)
设置项
fs_dir_name fs_dir配置名
fs_dirs: 定义文件打包规则
source_dir: 本地的文件目录路径
target_dir: 在镜像内生成的目录路径
dir_mode: 文件目录权限?
file_mode: 文件权限?
ignore_files: 需要忽略的文件,如果不设置这个选项,source_dir指向的目录路径所有文件都会被copy
is_strip:TRUE ?目前没看懂,猜测是强制该目录必须存在?
fs_filemode: ?目前没看懂,猜测是为了fs_make_cmd配置文件权限?
fs_make_cmd: 这一段配置权限后,使用rootfsimg_liteos.sh生成镜像
以上打?的地方是还没弄明白的,如果有知道的大佬可以留言说一下,感激不尽~
ps: 最后这个52428800很熟悉,这不就是userfs.img的镜像大小嘛~
fs_dir_name: userfs
...
fs_make_cmd:
- ${root_path}/build/lite/make_rootfs/rootfsimg_liteos.sh ${fs_dir} vfat 52428800
注意事项
个人建议如果只是调试小程序,小Demo,fs.yml是不需要修改的,BUILD.gn中除了必须设置的属性外,尽量不使用output_dirs,或者copy()等把文件放置在特定路径下,也就是一般情况执行文件都会在out/{相关产品}/bin 中,库一般都会在out/{相关产品}/usr/lib路径下,随着默认设置一并打包到镜像内。
hispark_taurus的 fa.yml样例全貌
-
fs_dir_name: mksh_rootfs
fs_dirs:
-
source_dir: ${root_path}/out/preloader/${product_name}/system
target_dir: system
dir_mode: 555
file_mode: 444
-
source_dir: bin
target_dir: bin
ignore_files:
- Test.bin
- TestSuite.bin
- query.bin
- cve
- checksum
is_strip: TRUE
dir_mode: 555
file_mode: 555
-
source_dir: libs
target_dir: lib
ignore_files:
- .a
is_strip: TRUE
dir_mode: 555
file_mode: 555
-
source_dir: usr/lib
target_dir: usr/lib
ignore_files:
- .a
is_strip: TRUE
dir_mode: 555
file_mode: 555
-
source_dir: usr/bin
target_dir: usr/bin
is_strip: TRUE
dir_mode: 555
file_mode: 555
-
source_dir: vendor
target_dir: vendor
dir_mode: 555
file_mode: 444
-
source_dir: config
target_dir: etc
ignore_files:
- init.cfg
dir_mode: 555
file_mode: 444
-
source_dir: system
target_dir: system
dir_mode: 555
file_mode: 444
-
source_dir: etc
target_dir: etc
dir_mode: 555
file_mode: 444
-
source_dir: obj/foundation/systemabilitymgr/samgr_lite/config
target_dir: etc
dir_mode: 555
file_mode: 444
-
target_dir: system/external
-
target_dir: proc
-
target_dir: dev
-
target_dir: storage
-
target_dir: userdata
fs_filemode:
-
file_dir: "etc/init.cfg"
file_mode: 400
-
file_dir: "bin/init"
file_mode: 500
-
file_dir: "bin/mksh"
file_mode: 500
fs_make_cmd:
- chmod 777 ${fs_dir}/etc
- chmod 777 ${fs_dir}/etc/init_mksh.cfg
- mv ${fs_dir}/etc/init_mksh.cfg ${fs_dir}/etc/init.cfg
- chmod 400 ${fs_dir}/etc/init.cfg
- chmod 555 ${fs_dir}/etc
- ${root_path}/build/lite/make_rootfs/rootfsimg_liteos.sh ${fs_dir} vfat
-
fs_dir_name: rootfs
fs_dirs:
-
source_dir: ${root_path}/out/preloader/${product_name}/system
target_dir: system
dir_mode: 555
file_mode: 444
-
source_dir: bin
target_dir: bin
ignore_files:
- Test.bin
- TestSuite.bin
- query.bin
- cve
- checksum
is_strip: TRUE
dir_mode: 555
file_mode: 555
-
source_dir: libs
target_dir: lib
ignore_files:
- .a
is_strip: TRUE
dir_mode: 555
file_mode: 555
-
source_dir: usr/lib
target_dir: usr/lib
ignore_files:
- .a
is_strip: TRUE
dir_mode: 555
file_mode: 555
-
source_dir: usr/bin
target_dir: usr/bin
is_strip: TRUE
dir_mode: 555
file_mode: 555
-
source_dir: vendor
target_dir: vendor
dir_mode: 555
file_mode: 444
-
source_dir: config
target_dir: etc
ignore_files:
- init_mksh.cfg
dir_mode: 555
file_mode: 444
-
source_dir: system
target_dir: system
dir_mode: 555
file_mode: 444
-
source_dir: etc
target_dir: etc
dir_mode: 555
file_mode: 444
-
source_dir: obj/foundation/systemabilitymgr/samgr_lite/config
target_dir: etc
dir_mode: 555
file_mode: 444
-
target_dir: system/external
-
target_dir: proc
-
target_dir: dev
fs_filemode:
-
file_dir: "etc/init.cfg"
file_mode: 400
-
file_dir: "bin/init"
file_mode: 500
-
file_dir: "bin/shell"
file_mode: 500
fs_make_cmd:
- ${root_path}/build/lite/make_rootfs/rootfsimg_liteos.sh ${fs_dir} vfat
-
fs_dir_name: userfs
fs_dirs:
-
source_dir: obj/base/security/services/app_verify/config
target_dir: data/verify
-
source_dir: storage/etc
target_dir: etc
-
source_dir: data
target_dir: data
-
target_dir: app
-
target_dir: data/system/param
fs_make_cmd:
- ${root_path}/build/lite/make_rootfs/rootfsimg_liteos.sh ${fs_dir} vfat 52428800
fs_attr:
tee_enable:
fs_dirs:
-
target_dir: data/sec_storage_data
-
target_dir: sec_storage