Open Harmony 移植:build lite 配置目录全梳理

这篇具有很好参考价值的文章主要介绍了Open Harmony 移植:build lite 配置目录全梳理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

命令行工具 hb (HarmonyOS|OpenHarmony Build 编译构建系统的缩写) 都很熟悉了。这是一个基于 gn 和 ninja 的构建系统,以支持 OpenHarmony 组件化开发为目标,提供以下基本功能:

  • 支持按组件拼装产品并编译。
  • 独立构建芯片解决方案厂商源码。
  • 独立构建单个组件

工具 hb 对应的开源代码仓为 build lite,代码目录如下:


```bash
build/lite
├── components                  # 组件描述文件
├── figure                      # readme中的图片
├── hb                          # hb pip安装包源码
├── make_rootfs                 # 文件系统镜像制作脚本
├── config                      # 编译配置项
│   ├── component               # 组件相关的模板定义
│   ├── kernel                  # 内核相关的编译配置
│   └── subsystem               # 子系统编译配置
├── platform                    # ld脚本
├── testfwk                     # 测试编译框架
└── toolchain                   # 编译工具链配置,包括:编译器路径、编译选项、链接选项等

本文主要梳理 build lite 轻量级编译构建系统涉及的配置目录。有些知识点,只能从代码中获取,官方资料里没有提供很详细的说明,希望此文可以对此进行补充。

我们先看些相关的文件的代码片段。

1、build\lite\ohos_var.gni

文件 build\lite\ohos_var.gni 定义了所有部件的全局变量,该文件还用于读取产品解决方案的配置文件 config.json 中的配置项,解析为 gn 变量。该文件被文件
openharmony\build\lite\config\BUILDCONFIG.gn 包含导入 import。该文件的代码片段如下,我们主要看下配置的目录。⑴处表明如果产品解决方案的配置文件 config.json 中定义了 “vendor_adapter_dir”,则环境变量 ohos_vendor_adapter_dir、ohos_board_adapter_dir 均设置为所配置的目录。这个是开发板适配目录,从代码中的注释 “To be deleted, and will use board config.” 可以看出,不建议使用这个配置项,要删除,只是为了兼容,还在继续保留着吧。实现同样功能的配置项是开发板配置文件 config.gni 中的配置项 board_adapter_dir,下文会详细分析。

⑵处为产品适配目录 “product_adapter_dir”,一些和产品相关的需要适配的部件,会把适配文件放在在配置的目录内。⑶处 third_party_dir 用于维护第三方软件的目录,虽然我们都知道 openharmony 的第三方目录为 third_party,部分子系统部件需要明确的指定这个目录。

    if (product_path != "") {
    product_config = read_file("${product_path}/config.json", "json")

    # Board selected by product.
    board_name = product_config.board
    device_company = product_config.device_company

    # Supported kernel: "liteos_a", "liteos_m", "linux"
    ohos_kernel_type = product_config.kernel_type
    if (defined(product_config.kernel_is_prebuilt)) {
        ohos_kernel_is_prebuilt = product_config.kernel_is_prebuilt
    }

    # To be deleted, and will use board config.if (defined(product_config.vendor_adapter_dir)) {
        ohos_vendor_adapter_dir = product_config.vendor_adapter_dir
        ohos_board_adapter_dir = ohos_vendor_adapter_dir
    }
⑵  ohos_product_adapter_dir = product_config.product_adapter_dir
⑶  ohos_third_party_dir = product_config.third_party_dir
    }

2、build\lite\config\BUILDCONFIG.gn

文件 build\lite\config\BUILDCONFIG.gn 用于配置编译构建,该文件会 import 导入产品解决方案和芯片开发板解决方案的配置文件。该文件会解析开发板配置文件 config.gni。如⑴所示,board_adapter_dir 为开发板适配目录,用于存放 OHOS 部件的适配文件。

从上文已知,产品解决方案的配置文件 config.json 中也能配置开发板适配目录。到这里,我们可以知道开发板配置文件 config.gni 在的这个配置选项优先级更高,只要配置了就会覆盖 config.json 中的配置的开发板适配目录。这两个配置项 ohos_board_adapter_dir 和 ohos_vendor_adapter_dir 用途是一致的,别名吧。

    import("//build/lite/ohos_var.gni")
    import("${device_path}/config.gni")
    ......
    # Load board adapter dir from board config.if (board_adapter_dir != "") {
    ohos_board_adapter_dir = board_adapter_dir
    ohos_vendor_adapter_dir = board_adapter_dir
    }

3、移植案例中配置文件中的目录配置示例

看了 build lite 相关的代码片段之后,我们看下几个移植案例的配置文件片段。

文件 openharmony\vendor\bearpi\bearpi_hm_nano\config.json 配置的目录有三方目录和产品适配目录 third_party_dir。

   "third_party_dir": "//device/soc/hisilicon/hi3861v100/sdk_liteos/third_party",
    "product_adapter_dir": "//vendor/bearpi/bearpi_hm_nano/hals"

文件 openharmony\vendor\goodix\gr5515_sk_iotlink_demo\config.json 配置的目录有芯片开发板适配目录 vendor_adapter_dir 和产品适配目录 product_adapter_dir。

  "third_party_dir": "",
  "vendor_adapter_dir": "//device/soc/goodix/gr551x/adapter",
  "product_adapter_dir": "//vendor/goodix/gr5515_sk_iotlink_demo/hals"

在文件 openharmony\device\board\goodix\gr5515_sk\liteos_m\config.gni 中,也配置了开发板适配目录 board_adapter_dir。两处配置文件都进行了配置,根据上文分析 build lite 的代码,只在 config.gni 中配置一次即可。

#Board adapter dir for OHOS components.
board_adapter_dir = "//device/soc/goodix/gr551x/adapter"

3、product_adapter_dir 产品适配目录

在开发产品时,有哪些子系统或部件需要在产品适配目录里放置适配文件呢?我们在 OpenHarmony 代码目录下执行 grep ohos_product_adapter_dir -rn ./,输出如下。可以看出,当前需要适配的部件包含:security 子系统的 permission 权限管理部件和启动子系统的 syspara_lite 系统参数部件。对于 permission 权限管理部件,需要在产品适配目录下创建 security/permission_lite 目录。对于 syspara_lite 系统参数部件,需要在产品适配目录下创建 utils/sys_param,utils/token 目录。这些目录不能随意命名,因为在子系统部件的 BUILD.gn 里写死的。需要适配实现哪些文件,在分析相关的部件时提供。

./base/security/permission/services/permission_lite/pms/BUILD.gn:42:    "${ohos_product_adapter_dir}/security/permission_lite:hal_pms",
./base/security/permission/services/permission_lite/ipc_auth/BUILD.gn:25:    "${ohos_product_adapter_dir}/security/permission_lite/ipc_auth/include",
./base/startup/syspara_lite/frameworks/parameter/src/BUILD.gn:31:    deps = [ "$ohos_product_adapter_dir/utils/sys_param:hal_sysparam" ]
./base/startup/syspara_lite/frameworks/parameter/src/BUILD.gn:54:      "$ohos_product_adapter_dir/utils/sys_param:hal_sysparam",
./base/startup/syspara_lite/frameworks/token/BUILD.gn:30:      "$ohos_product_adapter_dir/utils/token:haltoken_shared",
./base/startup/syspara_lite/frameworks/token/BUILD.gn:47:    deps = [ "$ohos_product_adapter_dir/utils/token:hal_token_static" ]

4、board_adapter_dir 芯片开发板适配目录

在开发产品时,有哪些子系统或部件需要在芯片开发板适配目录里放置适配文件呢?我们在 OpenHarmony 代码目录下执行 grep ohos_board_adapter_dir -rn ./,输出如下。可以看出,当前需要适配的部件包含:Utils 子系统的 File 部件、multimedia 子系统,communication 子系统的 wifi_aware、wifi_lite、bluetooth 等部件、iot_hardware 子系统、update 子系统的 ota_lite 部件。每个子系统或部件的适配目录不能随意命名,因为在子系统部件的 BUILD.gn 里写死的。具体需要哪些目录,可以参考下面的搜索结果。需要适配实现哪些文件,在分析相关的部件时提供。

./utils/native/lite/file/BUILD.gn:22:  deps = [ "$ohos_board_adapter_dir/hals/utils/file:hal_file_static" ]
./foundation/multimedia/utils/lite/BUILD.gn:42:      "$ohos_board_adapter_dir/media:hardware_media_sdk",
./foundation/multimedia/utils/lite/BUILD.gn:43:      "$ohos_board_adapter_dir/middleware:middleware_source_sdk",
./foundation/communication/wifi_aware/BUILD.gn:20:    "$ohos_board_adapter_dir/hals/communication/wifi_lite/wifiservice/source",
./foundation/communication/wifi_aware/BUILD.gn:22:  deps = [ "$ohos_board_adapter_dir/hals/communication/wifi_lite/wifiaware:hal_wifiaware" ]
./foundation/communication/bluetooth/services/bluetooth/BUILD.gn:18:    "$ohos_board_adapter_dir/hals/communication/bluetooth/services:btservice",
./base/iot_hardware/peripheral/BUILD.gn:18:    "$ohos_board_adapter_dir/hals/iot_hardware/wifiiot_lite:hal_iothardware",
./base/iot_hardware/peripheral/BUILD.gn:25:      "$ohos_board_adapter_dir/hals/iot_hardware/wifiiot_lite:hal_iothardware",
./base/update/ota_lite/frameworks/test/unittest/common/BUILD.gn:36:    deps += [ "$ohos_board_adapter_dir/hals/update:hal_update_static" ]
./base/update/ota_lite/frameworks/test/unittest/common/BUILD.gn:39:    deps += [ "$ohos_board_adapter_dir/update:hal_update" ]
./base/update/ota_lite/frameworks/source/BUILD.gn:36:    deps += [ "$ohos_board_adapter_dir/hals/update:hal_update_static" ]
./base/update/ota_lite/frameworks/source/BUILD.gn:64:    deps += [ "$ohos_board_adapter_dir/update:hal_update" ]

5、内核配置文件夹 kernel_configs

在产品解决方案根目录下的文件夹 openharmony\vendor\goodix\gr5515_sk_iotlink_demo\kernel_configs,是内核内核文件夹。目前,下面主要是内核特性裁剪配置文件 debug.config、release.config 等等。这个配置文件夹及下面的文件是如何使用的,从文件 kernel\liteos_m\liteos.gni 可以找到答案,代码片段如下。可以看出具体使用哪个文件,是根据编译构建类型决定的,debug、release、tee 等等。

liteos_config_file = "${ohos_build_type}.config"

liteos_config_file =
    rebase_path(liteos_config_file, "", "$product_path/kernel_configs")
print("liteos_config_file:", liteos_config_file)

6、ACE 配置文件夹 ace_lite_config

如果配置 ACE 子系统的 ace_engine_lite 部件,需要在产品解决方案目录下创建目录 ace_lite_config,存放相应的头文件对部件进行配置定义。可以查看文件 foundation\ace\ace_engine_lite\frameworks\targets\BUILD.gn 中的代码片段了解更多。

config("ace_lite_target_config") {
  if (enable_ohos_ace_engine_lite_product_config) {
    defines = [ "ENABLE_OHOS_ACELITE_PRODUCT_CONFIG=1" ]
  }
  include_dirs = [ "$product_path/ace_lite_config" ]
 ......
}

7、三方软件文件夹 third_party_dir

上文已经知道部分部件依赖三方软件,具体是哪些部件依赖三方软件,我们在 OpenHarmony 代码目录下执行 grep ohos_third_party_dir -rn ./,输出如下。可以看出,当前需要适配的部件包含:communication、ota_lite 部件。文章来源地址https://www.toymoban.com/news/detail-834154.html

./foundation/communication/softbus_lite/discovery/BUILD.gn:32:      "$ohos_third_party_dir/lwip_sack/include",
./foundation/communication/softbus_lite/trans_service/BUILD.gn:31:      "$ohos_third_party_dir/lwip_sack/include",
./foundation/communication/softbus_lite/trans_service/BUILD.gn:32:      "$ohos_third_party_dir/mbedtls/include",
./foundation/communication/softbus_lite/authmanager/BUILD.gn:31:      "$ohos_third_party_dir/mbedtls/include",
./base/update/ota_lite/frameworks/source/BUILD.gn:31:      "$ohos_third_party_dir/mbedtls/include",
./base/update/ota_lite/frameworks/source/BUILD.gn:32:      "$ohos_third_party_dir/lwip_sack/include",
./base/update/ota_lite/frameworks/source/BUILD.gn:55:      "$ohos_third_party_dir/mbedtls/include",
./base/update/ota_lite/frameworks/source/BUILD.gn:56:      "$ohos_third_party_dir/lwip_sack/include

到了这里,关于Open Harmony 移植:build lite 配置目录全梳理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [CMakeLists]使用CMake后如何将目录内容复制到build目录

    你可以用add_custom_command. 说你的目标被调用 MyTarget ,然后你可以这样做: 每次构建 MyTarget 并将\\\"/ config\\\"的内容复制到目标exe/lib最终的目录时,都会执行此操作. 正如马克Lakata在下面评论指出,更换 PRE_BUILD 用 POST_BUILD 在 add_custom_command 确保复制如果生成成功才会发生. 说明 ${CMAKE_CO

    2024年02月16日
    浏览(37)
  • AndroidStudio项目根目录下build.gradle和build.gradle.kts区别

    目录 一、环境 二、创建不同项目对应不同情况 1.如果选择我打勾的Empty Activity的话语言默认是Kotlin; 2.如果不想使用Kotlin语言,更改java语言的话,那么在创建项目时候选择Empty Views Activity 我使用的是AndroidStudio2023版本 这是2023版本对应的创建新项目的页面: 1.如果选择我打勾的

    2024年04月27日
    浏览(37)
  • HarmonyOS 工程目录介绍

    工程目录 AppScope:存放应用全局所需要的资源文件 base element:文件夹主要存放公共的字符串、布局文件等资源 media:存放全局公共的多媒体资源文件 app.json5:应用的全局的配置文件,用于存放应用公共的配置信息 entry:应用的主模块,存放HarmonyOS应用的代码、资源等 src oh

    2024年01月23日
    浏览(44)
  • HarmonyOS鸿蒙学习基础篇 - 项目目录和文件介绍

    ├── hvigor //存储购置信息的文件,主要用于发布打包 ├── idea  //开发工具相关配置可忽略 ├── AppScope //工程目录 全局公共资源存放路径  │   └── resources   │   │   └── base │   │   │   └── element //常亮存放 │   │   │       └── string.json //保

    2024年01月21日
    浏览(39)
  • 前端打包后生成的dist 或 build目录,如何在本地启动服务运行

    前端打包后生成的dist/build目录,如何在本地启动服务运行 运行 npn run build ,会打包后会产生 dist 或 build 目录 一般情况下,直接打开dist 或 build 目录下的 index.html 会在浏览器看到内容。 然而发现网页一片空白,打开了控制台,看到一片404的各种找不到资源,或者出现跨域的

    2024年02月02日
    浏览(48)
  • Android——Gradle插件项目根目录settings.gradle和build.gradle

    项目根目录下的settings.gradle配置文件示例: 对每个项目和全局的配置。 pluginManagement{}块只能出现在两个设置中。 一个是settings.gradle文件,它必须是文件中的第一个代码块,顺序第一出现;另一个是Initialization Scripts,不在本文讨论内。 具体使用官方网址:Gradle-pluginManagemen

    2024年02月04日
    浏览(53)
  • Paddle build_cinn_pass_test源码阅读(fluid目录下)

    代码位置在 paddlefluidframeworkpaddle2cinnbuild_cinn_pass_test.cc ,因为paddle CINN和PIR部分依旧在高频更新,所以各位看到的可能和我的不一样 用一个内联函数, 去看一个 unordered_set (一系列节点) 中是否有某个 node 的名字是 op_name,用 std::find_if 去实现, 第三个参数传入的是匿名函数。

    2024年02月07日
    浏览(48)
  • 【Docker】docker挂载的目录无法读写(cannot open directory ‘.‘: Permission denied)或者cannot open File

    使用docker将容器的某个文件夹挂载在宿主机时,有时候启动容器会发现报错:…cannot open File或者cannot open directory ‘.’: Permission denied。 又或者挂载成功后,发现宿主机这个文件并没有数据,又或者容器的配置文件不在官方说的路径,又或者进入容器内部时,在挂载的那个文

    2024年02月03日
    浏览(48)
  • Harmony 4.0 ArkUI 开发 Mac环境变量配置,及如何查看Harmony手机 API 版本

    mac配置 或者 加入你自己的SDK路径,我的路径是/Users/xxx/Library/Huawei 然后保存 或者 验证 ohpm 在DevEco Studio Teriminal终端执行 执行结果如果,则配置成功 然后连接真机,手机打开开发者模式,打开USB调试执行 如果运行下面这样代表配置成功 然后执行 运行如下返回6代表当前手机

    2024年02月03日
    浏览(56)
  • IO线程,文件IO(open),文件(stat)与目录(opendir)属性的读取

          一、文件IO 1、文件io通过系统调用来操作文件 系统调用:系统提供给用户的一组API(接口函数)         open/read/write/close/lseek... 用户空间进程访问内核的接口 把用户从底层的硬件编程中解放出来 极大的提高了系统的安全性 使用户程序具有可移植性(同一系统下) 是操作

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包