鸿蒙系统怎么快速编译

  1. hb build -f是全量编译,有近2k文件,编译速度非常慢
  2. 我使用的嵌入式板子是Hi3518EV300,编译过程中我发现了很多test也参与了编译,这些在对于非硬件驱动开发工程师来讲不需要。故 把此部分干掉会节省很多时间。修改如下文件/vendor/hisilicon/hispark_aries/config.json把子系统test删除,你会发现编译文件数量立即降到1k以内,我配置的config.json如下:
{
    "product_name": "ipcamera_hispark_aries",
    "ohos_version": "OpenHarmony 1.0",
    "device_company": "hisilicon",
    "board": "hispark_aries",
    "kernel_type": "liteos_a",
    "kernel_version": "",
    "subsystems": [
      {
        "subsystem": "aafwk",
        "components": [
          { "component": "ability", "features":[ "enable_ohos_appexecfwk_feature_ability = false" ] }
        ]
      },
      {
        "subsystem": "applications",
        "components": [
          { "component": "test_app", "features":[] }
        ]
      },
      {
        "subsystem": "hiviewdfx",
        "components": [
          { "component": "hilog", "features":[] }
        ]
      },
      {
        "subsystem": "distributed_schedule",
        "components": [
          { "component": "system_ability_manager", "features":[] },
          { "component": "foundation", "features":[] },
          { "component": "distributed_schedule", "features":[] }
        ]
      },
      {
        "subsystem": "security",
        "components": [
          { "component": "hichainsdk", "features":[] },
          { "component": "permission", "features":[] },
          { "component": "app_verify", "features":[] }
        ]
      },
      {
        "subsystem": "graphic",
        "components": [
          { "component": "graphic_utils", "features":[] },
          { "component": "surface", "features":[] }
        ]
      },
      {
        "subsystem": "startup",
        "components": [
          { "component": "syspara", "features":[] },
          { "component": "bootstrap", "features":[] },
          { "component": "init", "features":[] },
          { "component": "appspawn", "features":[] }
        ]
      },
      {
        "subsystem": "kernel",
        "components": [
          { "component": "liteos_a", "features":[] }
        ]
      },
      {
        "subsystem": "communication",
        "components": [
          { "component": "ipc", "features":[] },
          { "component": "soft_bus", "features":[] },
          { "component": "wpa_supplicant", "features":[] }
        ]
      },
      {
        "subsystem": "drivers",
        "components": [
          { "component": "adapter_uhdf", "features":[] },
          { "component": "peripheral_display", "features":[] },
          { "component": "peripheral_input", "features":[] },
          { "component": "peripheral_wlan", "features":[] }
        ]
      },
      {
        "subsystem": "appexecfwk",
        "components": [
          { "component": "bundle_mgr", "features":[] }
        ]
      },
      {
        "subsystem": "utils",
        "components": [
          { "component": "kv_store", "features":[] },
          { "component": "os_dump", "features":[] }
        ]
      },
      {
        "subsystem": "vendor",
        "components": [
          { "component": "middleware", "features":[] },
          { "component": "hi3518ev300_init", "features":[] },
          { "component": "hardware", "features":[] }
        ]
      }
    ],
    "vendor_adapter_dir": "//device/hisilicon/hardware",
    "third_party_dir": "//third_party",
    "product_adapter_dir": "//vendor/hisilicon/hispark_aries/hals",
    "ohos_product_type":"",
    "ohos_manufacture":"",
    "ohos_brand":"",
    "ohos_market_name":"",
    "ohos_product_series":"",
    "ohos_product_model":"",
    "ohos_software_model":"",
    "ohos_hardware_model":"",
    "ohos_hardware_profile":"",
    "ohos_serial":"",
    "ohos_bootloader_version":"",
    "ohos_secure_patch_level":"",
    "ohos_abi_list":""
  }

applications子系统是我自己写的测试demo,我把ai_server和media_server全部删除了,因为我这个dmeo不需要

  1. /vendor/hisilicon/hispark_aries/init_configs/init_liteos_a_3518ev300.cfg是系统启动后,init进程拉起的进程配置,配置如下:
{
    "jobs" : [{
            "name" : "pre-init",
            "cmds" : [
                "mkdir /storage/data/log",
                "chmod 0755 /storage/data/log",
                "chown 4 4 /storage/data/log",
                "loadcfg /patch/fstab.cfg",
                "mkdir /storage/data/softbus",
                "chmod 0700 /storage/data/softbus",
                "chown 7 7 /storage/data/softbus",
                "mkdir /sdcard",
                "chmod 0777 /sdcard",
                "mount vfat /dev/mmcblk0 /sdcard rw,umask=000",
                "mount vfat /dev/mmcblk1 /sdcard rw,umask=000"
            ]
        }, {
            "name" : "init",
            "cmds" : [
                "start shell",
                "start apphilogcat",
                "start foundation",
                "start bundle_daemon",
                "start appspawn",
                "start hiview"
            ]
        }, {
            "name" : "post-init",
            "cmds" : [
                "chown 0 99 /dev/hdf/dev_mgr",
                "chown 0 99 /dev/hdf/hdfwifi",
                "chown 0 99 /dev/gpio",
                "chown 0 99 /dev/i2c-0",
                "chown 0 99 /dev/i2c-1",
                "chown 0 99 /dev/i2c-2",
                "chown 0 99 /dev/uartdev-0",
                "chown 0 99 /dev/uartdev-1",
                "chown 0 99 /dev/uartdev-2",
                "chown 0 99 /dev/spidev0.0",
                "chown 0 99 /dev/spidev1.0",
                "chown 0 99 /dev/spidev1.1"
            ]
        }
    ],
    "services" : [{
            "name" : "foundation",
            "path" : ["/bin/foundation"],
            "uid" : 7,
            "gid" : 7,
            "once" : 0,
            "importance" : 1,
            "caps" : [10, 11, 12, 13]
        }, {
            "name" : "shell",
            "path" : ["/bin/shell"],
            "uid" : 2,
            "gid" : 2,
            "once" : 0,
            "importance" : 0,
            "caps" : [4294967295]
        }, {
            "name" : "appspawn",
            "path" : ["/bin/appspawn"],
            "uid" : 1,
            "gid" : 1,
            "once" : 0,
            "importance" : 0,
            "caps" : [2, 6, 7, 8, 11, 23]
        }, {
            "name" : "apphilogcat",
            "path" : ["/bin/apphilogcat"],
            "uid" : 4,
            "gid" : 4,
            "once" : 1,
            "importance" : 0,
            "caps" : []
        }, {
            "name" : "wms_server",
            "path" : ["/bin/wms_server"],
            "uid" : 6,
            "gid" : 6,
            "once" : 1,
            "importance" : 0,
            "caps" : []
        }, {
            "name" : "bundle_daemon",
            "path" : ["/bin/bundle_daemon"],
            "uid" : 8,
            "gid" : 8,
            "once" : 0,
            "importance" : 0,
            "caps" : [0, 1]
        }, {
            "name" : "hiview",
            "path" : ["/bin/hiview"],
            "uid" : 4,
            "gid" : 4,
            "once" : 1,
            "importance" : 0,
            "caps" : []
        }
    ]
}

  1. 这个时候编译你会发现还是有单元测试的模块编译进来如ai service,找到对应的BUILD.gn你会发现原来当编译是debug系统时会编译单元测试模块
import("//build/lite/config/component/lite_component.gni")

# manage all components of aisystem

lite_component("ai") {
  features = [
    "client:client",
    "server:server",
  ]
  if (ohos_build_type == "debug") {
    deps = [ "//foundation/ai/engine/test" ]
  }
}

而我们hb build编译时默认就是debug,如果编译release就不会有了,我们执行 hb build -f -b release,发现又少了100多个文件参与编译,我这边编译一次系统只有600多个文件了,速度比之前快了很多

  1. 另外鸿蒙支持模块编译,此模块对应的名称在/build/lite/components下面的json文件中,如我只想编译soft_bus模块,输入 hb build soft_bus即可,同时通过修改可以裁剪子系统下面的对应的模块
posted @ 2021-03-26 14:42  Bonker  阅读(967)  评论(0编辑  收藏  举报