精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenHarmony 移植:build lite 編譯構建過程

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-19 16:19 ? 次閱讀

配置完畢產品解決方案、芯片開發(fā)板解決方案,就可以執(zhí)行 hb build 進行編譯。但是產品解決方案代碼是如何被調用編譯的?

芯片開發(fā)板解決方案代碼是如何被調用編譯的?內核代碼如何被調用編譯的?解決了這些疑惑,會對 build lite 編譯構建過程有個更深入的理解。

1、產品解決方案代碼是如何被調用編譯的

在文件 buildliteBUILD.gn 配置文件中的構建目標 //build/lite:product 的代碼片段如下,可以看出產品解決方案是被 //build/lite:product 調用的。其中⑴處的 ohos_build_target,由 hb build -T XX 構建參數指定,一般不指定時為空。

  group("product") {
    deps = []

    # build product, skip build single component scenario.
⑴  if (ohos_build_target == "") {
        deps += [ "${product_path}" ]
    }
    }

//build/lite:product 又進一步被什么模塊調用?在恒玄的代碼配置文件 devicesocbestechnicbes2600BUILD.gn 中使用了,非恒玄的沒有調用 //build/lite:product。所以,除了 //build/lite:product,還有其他調用編譯產品解決方案代碼的地方。

以 vendorgoodixgr5515_sk_iotlink_demo 為例,來了解下什么地方會調用編譯產品解決方案代碼。產品解決方案根目錄下有文件 vendorgoodixgr5515_sk_iotlink_demoohos.build,片段如下。可以看到,有子系統(tǒng) subsystem 和部件信息 parts。

{
  "parts": {
    "product_gr5515_sk_iotlink_demo": {
      "module_list": [
        "http://vendor/goodix/gr5515_sk_iotlink_demo:gr5515_sk_iotlink_demo",
        "http://vendor/goodix/gr5515_sk_iotlink_demo:image"
      ]
    }
  },
  "subsystem": "product_gr5515_sk_iotlink_demo"
}

在編譯構建時,會基于 ohos.build 文件,解析子系統(tǒng)和部件信息,生成到 outgr5515_skgr5515_sk_iotlink_demobuild_configsparts_infosubsystem_parts.json 文件中,片段如下。這些解析出來的子系統(tǒng)和部件信息,編譯構建構建 hb 會組織進行編譯構建。

  "product_gr5515_sk_iotlink_demo": [
    "product_gr5515_sk_iotlink_demo"
  ],

2、芯片開發(fā)板解決方案代碼是如何被調用編譯的

在文件 kernelliteos_mBUILD.gn 中定義的名為 modules 構建目標,這個 modules 構建目標依賴芯片開發(fā)板解決方案的代碼。。⑴處判斷芯片和開發(fā)板是否是否進行了文件夾解耦,如果開發(fā)板路徑包含 “/board/”, 說明 soc 和 board 進行了解耦。根據是否解耦,依賴的芯片開發(fā)板的構建配置文件路徑是不同的,見⑵。

  # board and soc decoupling feature, device_path should contains board
⑴  BOARD_SOC_FEATURE = device_path != string_replace(device_path, "/board/", "")
    ......
    group("modules") {
    deps = [
        "arch",
        "components",
        "kal",
        "kernel",
        "testsuites",
        "utils",
        HDFTOPDIR,
    ]

⑵  if (BOARD_SOC_FEATURE) {
        deps += [ "http://device/board/$device_company" ]
        deps += [ "http://device/soc/$LOSCFG_SOC_COMPANY" ]
    } else {
        if (HAVE_DEVICE_SDK) {
        deps += [ device_path ]
        }
    }
    }

名為 modules 構建目標又被 libkernel 構建目標、進一步被名為 kernel 的構建目標調用,如下所示。內核的 kernel 構建目標如何被調用,下一小節(jié)分析。

static_library("libkernel") {
  deps = [ ":modules" ]
  complete_static_lib = false
}

group("kernel") {
  deps = [ ":libkernel" ]
}

3、內核代碼如何被調用編譯的

上文分析了產品解決方案、芯片開發(fā)板解決方案如何被調用的。本小節(jié),追蹤下內核代碼是如何被調用編譯的。

在生成的文件 outv200zrdisplay_demobuild_configskernelliteos_mBUILD.gn 中,會調用名為 kernel、build_kernel_image 的構建目錄。怎么生成的這個文件,需要研究下 hb 的代碼,深入了解下后臺的機制,希望后續(xù)有時間可以繼續(xù)深入一些。

import("http://build/ohos/ohos_kits.gni")
import("http://build/ohos/ohos_part.gni")
import("http://build/ohos/ohos_test.gni")

ohos_part("liteos_m") {
subsystem_name = "kernel"
module_list = [
    "http://kernel/liteos_m:kernel",
    "http://kernel/liteos_m:build_kernel_image",
]
origin_name = "liteos_m"
variant = "phone"
}

構建目標 build_kernel_image 可以生成 bin 文件,該目標依賴 copy_liteos,copy_liteos 依賴 liteos 構建目標,該目標會進一步調用 //build/lite:ohos。//build/lite:ohos 文件會依次調用各個子系統(tǒng)和部件的構建目標。

executable("liteos") {
configs += [
    ":public",
    ":los_config",
]

ldflags = [
    "-static",
    "-Wl,--gc-sections",
    "-Wl,-Map=$liteos_name.map",
]

output_dir = target_out_dir

if (liteos_kernel_only) {
    deps = [ ":kernel" ]
} else {
    deps = [ "http://build/lite:ohos" ]
}
}

copy("copy_liteos") {
deps = [ ":liteos" ]
sources = [ "$target_out_dir/unstripped/bin/liteos" ]
outputs = [ "$root_out_dir/$liteos_name" ]
}

build_ext_component("build_kernel_image") {
deps = [ ":copy_liteos" ]
exec_path = rebase_path(root_out_dir)

objcopy = "${compile_prefix}objcopy$toolchain_cmd_suffix"
objdump = "${compile_prefix}objdump$toolchain_cmd_suffix"

command = "$objcopy -O binary $liteos_name $liteos_name.bin"
command +=
    " && sh -c '$objdump -t $liteos_name | sort >$liteos_name.sym.sorted'"
command += " && sh -c '$objdump -d $liteos_name >$liteos_name.asm'"
}

4、名為 public 的 config

在文件 kernelliteos_mBUILD.gn 中,名為 public 的 config 定義如下。⑴處判斷芯片和開發(fā)板是否是否進行了文件夾解耦,如果開發(fā)板路徑包含 “/board/”, 說明 soc 和 board 進行了解耦。根據是否解耦,依賴的 public 的配置集的位置是不同的,見⑵。在芯片、開發(fā)板代碼目錄中的 BUILD.gn 文件中并沒有發(fā)現 config (“public”),這個比較奇怪。

 # board and soc decoupling feature, device_path should contains board
⑴  BOARD_SOC_FEATURE = device_path != string_replace(device_path, "/board/", "")

    config("public") {
    configs = [
        "arch:public",
        "kernel:public",
        "kal:public",
        "components:public",
        "utils:public",
    ]

⑵  if (BOARD_SOC_FEATURE) {
        configs += [ "http://device/board/$device_company:public" ]
        configs += [ "http://device/soc/$LOSCFG_SOC_COMPANY:public" ]
    } else {
        if (HAVE_DEVICE_SDK) {
        configs += [ "$device_path:public" ]
        }
    }
    }


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    453

    文章

    50396

    瀏覽量

    421793
  • 開發(fā)板
    +關注

    關注

    25

    文章

    4943

    瀏覽量

    97191
  • 編譯
    +關注

    關注

    0

    文章

    654

    瀏覽量

    32806
  • OpenHarmony
    +關注

    關注

    25

    文章

    3659

    瀏覽量

    16152
收藏 人收藏

    評論

    相關推薦

    如何讓OpenHarmony編譯速度“狂飆”

    OpenHarmony 有兩種編譯方式,一種是通過 hb 工具編譯,一種是通過 build.sh 腳本編譯。本文筆者將提升
    的頭像 發(fā)表于 02-14 09:31 ?1874次閱讀

    使用OpenHarmonyNDK移植三方庫Speexdsp

    加入了OpenHarmony編譯體系(基于ninja和gn),Speexdsp在linux下是使用構建工具configure、makefile構建的。
    的頭像 發(fā)表于 05-16 10:18 ?1956次閱讀
    使用<b class='flag-5'>OpenHarmony</b>NDK<b class='flag-5'>移植</b>三方庫Speexdsp

    OpenHarmony 移植build lite 配置目錄全梳理

    命令行工具 hb (HarmonyOS|OpenHarmony Build 編譯構建系統(tǒng)的縮寫) 都很熟悉了。這是一個基于 gn 和 ninja 的
    的頭像 發(fā)表于 02-18 16:42 ?872次閱讀

    鴻蒙南向開發(fā)—OpenHarmony技術編譯構建框架

    概述 OpenHarmony編譯子系統(tǒng)是以GN和Ninja構建為基座,對構建和配置粒度進行部件化抽象、對內建模塊進行功能增強、對業(yè)務模塊進行功能擴展的系統(tǒng),該系統(tǒng)提供以下基本功能: 以
    發(fā)表于 01-04 16:47

    從零開始移植OpenHarmony輕量系統(tǒng)

    摘要:本文簡單介紹OpenHarmony輕量系統(tǒng)移植,如何使用移植示例適合群體:想自己動手移植OpenHarmony輕量系統(tǒng)的朋友經過幾天的
    發(fā)表于 02-09 18:58

    OpenHarmony v3.1-Release編譯ModuleNotFound報錯怎么解決

    /OpenHarmony/build/lite/hb_internal/build/build.py”,第 21 行 從 hb_inter
    發(fā)表于 04-14 11:34

    OpenHarmony輕量和小型系統(tǒng)編譯構建指導

    構建流程hb set: 設置OpenHarmony源碼目錄和要編譯的產品。hb build: 編譯產品、開發(fā)板或者組件。
    發(fā)表于 05-25 10:46

    三步就能在OpenHarmony中實現車牌識別

    OpenCV 源碼根目錄新增 BUILD.gn 將 OpenCV 庫加入編譯構建移植EasyPR下載源碼獲取源碼 EasyPR 庫源碼放在源碼根目錄下的 third_party 下
    發(fā)表于 07-06 11:20

    4步成功將三方庫——speexdsp移植OpenHarmony

    歸)進行分享,他在完成了一個三方庫在OpenHarmony標準系統(tǒng)上的移植工作后,總結了以下經驗。四步實現三方庫移植:1、在Linux下編譯移植
    發(fā)表于 09-27 12:02

    剖析OpenHarmony3.0編譯構建流程

    ?? 早就打算研究下 OH3.0 的編譯框架了,最近一直在搞移植,總算有點進展了,抽個空來分析下 3.0 的編譯框架。 ?? 大體看了下和 2.0 的差別不是特別大:《 OpenHarmony
    的頭像 發(fā)表于 12-07 10:54 ?3185次閱讀

    多媒體音頻LITE組件的教程案例

    簡介 AUDIO_LITE組件提供音頻能力的支持。 圖 1 媒體子系統(tǒng)架構(藍色虛線框是audio_lite) 使用說明 單倉的編譯構建,在根目錄下進行單倉的
    發(fā)表于 04-06 09:54 ?1次下載
    多媒體音頻<b class='flag-5'>LITE</b>組件的教程案例

    OpenHarmony應用的編譯構建過程

    2022 年 3 月 31 日發(fā)布了最新的 IDE 工具 DevEco Studio 3.0 Beta3,仔細閱讀文檔后發(fā)現最新 OpenHarmony 應用的編譯構建過程已經公開。
    的頭像 發(fā)表于 04-21 08:13 ?3815次閱讀

    OpenHarmony技術論壇:OpenHarmony移植技術分享

    、芯片移植適配、開發(fā)板移植適配。 2.OpenHarmony北向共建:日志子系統(tǒng)開發(fā)、JS API構建、開源組件及核心庫支持。 3.OpenHarm
    的頭像 發(fā)表于 04-25 16:53 ?2761次閱讀
    <b class='flag-5'>OpenHarmony</b>技術論壇:<b class='flag-5'>OpenHarmony</b><b class='flag-5'>移植</b>技術分享

    鴻蒙OpenHarmony【標準系統(tǒng) 編譯】(基于RK3568開發(fā)板)

    OpenHarmony支持hb和build.sh兩種編譯方式。此處介紹hb方式,build.sh腳本編譯方式請參考[使用
    的頭像 發(fā)表于 05-08 17:37 ?938次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>【標準系統(tǒng) <b class='flag-5'>編譯</b>】(基于RK3568開發(fā)板)

    鴻蒙OpenHarmony開發(fā):【編譯構建指導】

    OpenHarmony編譯子系統(tǒng)是以GN和Ninja構建為基座,對構建和配置粒度進行部件化抽象、對內建模塊進行功能增強、對業(yè)務模塊進行功能擴展的系統(tǒng),該系統(tǒng)提供以下基本功能
    的頭像 發(fā)表于 05-13 09:31 ?1627次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>開發(fā):【<b class='flag-5'>編譯</b><b class='flag-5'>構建</b>指導】