OpenHarmony新增镜像操作方法
一丶背景介绍
很多小伙伴可能会有在OH中新增镜像的需求,下面为大家介绍一下,如何在OH系统框架中新增一个镜像。
本文章由移远通信技术股份有限公司提供,以下内容包含了个人理解,仅供参考,如有不合理处,请联系笔者修改/删除,18107158288(微信同号)。
二丶环境信息
软件版本:Openharmony-5.1-Release
硬件信息:dayu200
三丶实现步骤
在openharmony系统中,如果想单独新增一个镜像,好多小伙伴不知道如何操作,结合自己的经验现在来给大家分享下如何新增一个镜像,直接上干货。
1.
修改点路径为:build\ohos_var.gni
修改内容为,参考其他镜像(chip_prod)格式,添加一个别名:
declare_args() {
.........
........
# chip_prod package dir
chip_prod_base_dir = "chip_prod"
# nvdata1 package dir 自己新增的镜像
nvdata1_base_dir = "nvdata1"
}
2.
修改点路径为:build\ohos\images\BUILD.gn
修改内容为,添加自定义的nvdata1到镜像列表中:
image_list = [
"system",
"vendor",
"userdata",
"sys_prod",
"chip_prod",
"updater_ramdisk",
"eng_system",
"eng_chipset",
"nvdata1",
]
在制作镜像的时候,添加自己的镜像nvdata1
group("make_images") {
deps = []
if (is_standard_system) {
deps = [
"//third_party/e2fsprogs:e2fsprogs_host_toolchain",
"//third_party/f2fs-tools:f2fs-tools_host_toolchain",
]
foreach(_platform, target_platform_list) {
deps += [
":${_platform}_eng_chipset_image",
":${_platform}_eng_system_image",
":${_platform}_sys_prod_image",
":${_platform}_system_image",
":${_platform}_updater_ramdisk_image",
":${_platform}_userdata_image",
":${_platform}_vendor_image",
":${_platform}_nvdata1_image",
]
if (enable_ramdisk) {
deps += [ ":${_platform}_ramdisk_image" ]
}
}
deps += [ ":chip_prod_image" ]
if (is_standard_system && device_name == "rk3568") {
deps += [ ":mk_chip_ckm_img" ]
}
} else {
deps += [ "//build/ohos/packages:packer" ]
}
}
新增自己的镜像文件模块:
group("nvdata1_image") {
deps = []
if (is_standard_system) {
deps += [
"//third_party/e2fsprogs:e2fsprogs_host_toolchain",
"//third_party/f2fs-tools:f2fs-tools_host_toolchain",
]
}
foreach(_platform, target_platform_list) {
deps += [ ":${_platform}_nvdata1_image" ]
}
}
3.
修改路径为:build\ohos\images\build_image.py
修改点为:
新增一个函数:
def _prepare_nvdata1(nvdata1_path: str):
if os.path.exists(nvdata1_path):
shutil.rmtree(nvdata1_path)
os.makedirs(nvdata1_path, exist_ok=True)
函数的调用的地方:
if os.path.exists(args.output_image_path):
os.remove(args.output_image_path)
if args.image_name == 'userdata':
_prepare_userdata(args.input_path)
elif args.image_name == 'nvdata1':
_prepare_nvdata1(args.input_path)
4.
修改路径:build\ohos\images\mkimage\dac.txt
修改点,添加镜像的权限:
eng_system, 00777, 0, 2000, 0
eng_chipset, 00777, 0, 2000, 0
nvdata1, 00777, 0, 2000, 0
5.
修改路径:build\templates\metadata\gen_module_info.py
修改点:
在主函数会有三个修改点添加路径:
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--system-base-dir', required=True)
parser.add_argument('--ramdisk-base-dir', required=True)
parser.add_argument('--vendor-base-dir', required=True)
parser.add_argument('--updater-base-dir', required=True)
parser.add_argument('--updater_vendor-base-dir', required=True)
parser.add_argument('--eng_system-base-dir', required=True)
parser.add_argument('--nvdata1-base-dir', required=True)
...........新增路径
if args.install_images:
install_dests = gen_install_dests(
args.system_base_dir, args.ramdisk_base_dir, args.vendor_base_dir, args.updater_base_dir,
args.updater_vendor_base_dir, args.sys_prod_base_dir, args.chip_prod_base_dir,
args.eng_system_base_dir, args.nvdata1_base_dir, args.eng_chipset_base_dir, source_file_name,
args.install_images, args.module_install_dir, args.relative_install_dir, args.type)
...........新增路径
def gen_install_dests(system_base_dir, ramdisk_base_dir, vendor_base_dir, updater_base_dir,
updater_vendor_base_dir, sys_prod_base_dir, chip_prod_base_dir,
eng_system_base_dir, nvdata1_base_dir,eng_chipset_base_dir, source_file_name, install_images,
module_install_dir, relative_install_dir, module_type):
参考其他镜像,对于新增镜的自定义像也按照模板复制
elif image == 'eng_system':
dest = _gen_install_dest(eng_system_base_dir, module_install_dir,
relative_install_dir, module_type)
elif image == 'nvdata1':
dest = _gen_install_dest(nvdata1_base_dir, module_install_dir,
relative_install_dir, module_type)
6.
修改路径为:build\ohos\packages\modules_install.py
修改点:
nvdata1_install_base_dir = os.path.join(args.platform_installed_path,
'nvdata1')
if os.path.exists(nvdata1_install_base_dir):
shutil.rmtree(nvdata1_install_base_dir)
print('remove nvdata1 dir...')
7.
修改路径为:build\templates\metadata\module_info.gni
修改点:
action(target_name) {
args = [
"--system-base-dir",
system_base_dir,
"--ramdisk-base-dir",
ramdisk_base_dir,
"--vendor-base-dir",
vendor_base_dir,
"--updater-base-dir",
updater_base_dir,
"--sys_prod-base-dir",
sys_prod_base_dir,
"--eng_system-base-dir",
eng_system_base_dir,
"--nvdata1-base-dir",
nvdata1_base_dir,
8.
新建镜像的nvdata1_image_conf.txt文件
内容如下:
/nvdata1
4194304
--fs_type=ext4
--dac_config ../../build/ohos/images/mkimage/dac.txt
--file_context obj/base/security/selinux_adapter/file_contexts.bin
然后build\ohos\images\mkimage\和 build\ohos\images\mkimage\debug\nvdata1_image_conf.txt 路径下放一份,内容一样。
9.
修改路径:
base\security\selinux_adapter\sepolicy\base\system\file_contexts
修改点,因为dayu200适配了selinux,所以还需要修改下selinux的内容,如果OH的版本没有适配selinux,以下的步骤都可以忽略了,直接开始编译了
/nvdata1 u:object_r:rootfs:s0
/nvdata1(/.*)? u:object_r:nvdata1_file:s0
10.
修改路径为:
base\security\selinux_adapter\sepolicy\whitelist\partition_label_use_whitelist.txt
修改内容:
/nvdata1(/.*)? u:object_r:nvdata1_file:s0
11.
修改路径为:
base\security\selinux_adapter\scripts\selinux_check\config\partition_label.txt
修改内容,为:
u:object_r:nvdata1_file:s0
12.
修改路径为:
base\security\selinux_adapter\sepolicy\base\public\file.te
修改内容为:
type nvdata1_file, nvdata1_file_attr, file_attr;
13.
修改路径为:
base\security\selinux_adapter\sepolicy\base\public\attributes
修改内容为:
# Type of all nvdata1 files.
# i.e. /nvdata1/*
attribute nvdata1_file_attr;
以上修改完成之后,就可以开始使用编译指令编译自己的镜像了。
更多推荐

所有评论(0)