一、OpenHarmony master最新分支提供反对独立编译镜像的性能
OpenHarmony master最新分支提供反对独立编译镜像的性能。反对独立编译的镜像有
chip_prod.img、sys_prod.img、system.img、usedata.img、vendor.img、ramdisk.img、updater.img。- 例如
./build.sh --product-name rk3568 --ccache --build-target system_image
能够独自编译出system.img
镜像
- 例如
OpenHarmony Beta4和5编译构建过程中,只能够在编译命令
./build.sh --product-name rk3568 --ccache
指定--build-target images
或者--build-target make_images
对所有镜像进行编译。无奈通过指定单个镜像进行独立编译,同时单个镜像与platform关联,无奈间接指定单个镜像的名称。out/rk3568/packages/phone/images下镜像文件:MiniLoaderAll.bin boot_linux.img chip_prod.img config.cfg parameter.txt ramdisk.img resource.img sys_prod.img system.img uboot.img updater.img userdata.img vendor.img
二、批改OpenHarmonyBeta4源码新增独立编译镜像的性能
1、在OpenHarmonyBeta4源码build/ohos/images/BUILD.gn第48行增加如下内容
group("chip_prod_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}_chip_prod_image" ]}}group("sys_prod_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}_sys_prod_image" ]}}group("system_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}_system_image" ]}}group("userdata_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}_userdata_image" ]}}group("vendor_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}_vendor_image" ]}}group("ramdisk_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) { if (enable_ramdisk) { deps += [ ":${_platform}_ramdisk_image" ] }}}group("updater_ramdisk_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) { if (enable_ramdisk) { deps += [ ":${_platform}_updater_ramdisk_image" ] }}}group("updater_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) { if (!enable_ramdisk) { deps += [ ":${_platform}_updater_image" ] }}}
- 2、镜像独自编译前须要执行一次全量编译
./build.sh --product-name rk3568 --ccache
生成全副镜像 3、而后在./build.sh --product-name rk3568 --ccache 后指定--build-target
chip_prod_image
、sys_prod_image
、system_image
、userdata_image
、vendor_image
、updater_image
/updater_ramdisk_image
、ramdisk_image
别离生成对应的独自镜像- --build-target updater_ramdisk_image是编译出ramdisk类型的updater.img
--build-target updater_image是编译出非ramdisk类型的updater.img
- 目前Beta5版本的依然能够抉择编译非ramdisk类型和ramdisk类型的updater.img,然而最新分支master版本updater与enable_ramdisk 不再关联,都编译ramdisk类型的updater.img镜像,相干issue:南向适配,归一化一级二级启动
例如执行./build.sh --product-name rk3568 --ccache --build-target updater_image
生成非ramdisk类型的updater.img
三、批改OpenHarmonyBeta5源码新增独立编译镜像的性能
OpenHarmonyBeta5 曾经反对独自编译 多产品各自的chipprod镜像,且后面提到目前Beta5版本的依然能够抉择编译非ramdisk类型和ramdisk类型的updater.img
- 所以和OpenHarmonyBeta4中增加的代码不同,Beta5不须要增加group("chip_prod_image")的局部
1、在OpenHarmonyBeta5源码build/ohos/images/BUILD.gn第48行增加如下内容
group("sys_prod_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}_sys_prod_image" ]}}group("system_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}_system_image" ]}}group("userdata_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}_userdata_image" ]}}group("vendor_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}_vendor_image" ]}}group("ramdisk_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) { if (enable_ramdisk) { deps += [ ":${_platform}_ramdisk_image" ] }}}group("updater_ramdisk_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) { if (enable_ramdisk) { deps += [ ":${_platform}_updater_ramdisk_image" ] }}}group("updater_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) { if (!enable_ramdisk) { deps += [ ":${_platform}_updater_image" ] }}}
- 3、镜像独自编译前同样须要执行一次全量编译生成全副镜像
- 4、而后在./build.sh --product-name rk3568 --ccache 后指定--build-target
chip_prod_image
、sys_prod_image
、system_image
、userdata_image
、vendor_image
、updater_image
/updater_ramdisk_image
、ramdisk_image
别离生成对应的独自镜像
四、指定userdata.img镜像进行独立编译并且刷入触觉智能RK3568
- 1、笔者基于OpenHarmony Beta5源码如上述步骤批改源码后执行
./build.sh --product-name rk3568 --ccache --build-target userdata_image
独自编译生成userdata.img 2、触觉智能rk3568这款开发板镜像链接如下
链接:https://pan.baidu.com/s/1JXEBH9CQb4ruzOGz1prrjA?pwd=1234 提取码:1234
- 3、解压触觉智能rk3568开发板镜像后替换userdata.img,将残缺镜像刷入开发板
- 4、烧录结束,零碎失常启动。
知识点附送
如何更改OpenHarmony版本信息、SDK和NDK版本信息
- 源码目录下/sources/build/version.gni文件是OpenHarmony版本信息、SDK和NDK版本信息,要批改版本信息只须要在这个文件批改就好了
例如,Beta5的版本信息如下
# OHOS versiondeclare_args() {sdk_version = "3.2.10.6"api_version = "9"# Release type, optional values: Betax, RCx...release_type = "Beta5"meta_version = "3.0.0"}# ohos SDK versiondeclare_args() {current_sdk_version = sdk_version}# ohos NDK versiondeclare_args() {current_ndk_version = current_sdk_version}
扭转一个镜像文件的名称须要做哪些工作
- 以该issues为参考 https://gitee.com/openharmony... 学习将vendor.img改为chipset.img,其实只有把vendor字符全副替换成chipset。通过这个issue能够晓得vendor.img波及到源码中哪些文件
对于 --build-target
build-target 是传给ninja的参数,out/rk3568/build.ninja外面的工作都能够。
- 1、gn外面的一个target都能够,包含可执行程序,动静库,group,action,部件名
- 2、如果间接指定名称报unkonw target的话,可能是重名等起因,依照gn的全名称指定:{指标所在BUILD.gn的门路}:{指标名}, 比方: --build-target commonlibrary/c_utils/base:utils
- 3、build-target参数一次能够指定多,比方:--build-target A --build-target B
- 4、subsystem_name不是编译指标
- 5、部件名是一个非凡的指标,依据ohos.build编译系统生产的gn指标,如果间接指定部件名,应用--build-target {部件名} 报错unkonw target,能够应用一个部件的全名称指定:--build-target out/{device_name}/build_configs/{subsystem_name}/{part_name}:{part_name}
编译流程次要分为:preloader->loader->gn->ninja这四个过程
如何批改分区文件系统类型由ext4为f2fs
以该issues为例学习将批改/data分区文件系统由ext4为f2fs。
- 1、批改镜像文件打包形容文件
每个零碎镜像文件都是由一个image_conf.txt形容文件来形容。将镜像文件零碎类型由ext4改为f2fs。userdata.img 由build/ohos/images/mkimage/userdata_image_conf.txt形容。在其中
将--fs_type=ext4改为--fs_type=f2fs - 2、在rk3568规范零碎的defconfig文件中关上
prjquota 使能开关
,在源码目录在kernel/linux/config/linux-5.10/arch/arm64/configs/rk3568_standard_defconfig中第5945行中# CONFIG_QUOTA is not set
改为CONFIG_QUOTA=y
- 3、批改具体设施的fstab文件(这里批改的是rk3568的fstab文件,位于/device/board/hihope/rk3568/cfg/fstab.rk3568)中批改
分区的文件系统类型
、mnt_flags and options
和fs_mgr_flags
参数
fstab文件:启动的时候,零碎会主动地从这个文件读取信息,并且会主动将此文件中指定的文件系统挂载到指定的目录
批改镜像打包的配置参数调整分区大小
- 以该issue为例学习将rk3568 updater分区从20MB调整为30MB。
- 1、如果要批改某个镜像的打包参数,只须要批改//build/ohos/images/mkimage目录下对应的{镜像名}_image_config.txt文件即可。
- 2、在ramdisk类型的updater.img对应的形容文件build/ohos/images/mkimage/updater_ramdisk_image_conf.txt第二行将20971520KB改为33554432KB。