乐趣区

关于openharmony:触觉智能RK3568指定单个OpenHarmony镜像进行独立编译

一、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_imagesys_prod_imagesystem_imageuserdata_imagevendor_imageupdater_image/updater_ramdisk_imageramdisk_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_imagesys_prod_imagesystem_imageuserdata_imagevendor_imageupdater_image/updater_ramdisk_imageramdisk_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 version
    declare_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 version
    declare_args() {current_sdk_version = sdk_version}
    
    # ohos NDK version
    declare_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 optionsfs_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。
退出移动版