99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony 移植:build lite 編譯構(gòu)建過(guò)程

王程 ? 來(lái)源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-19 16:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

芯片開(kāi)發(fā)板解決方案代碼是如何被調(diào)用編譯的??jī)?nèi)核代碼如何被調(diào)用編譯的?解決了這些疑惑,會(huì)對(duì) build lite 編譯構(gòu)建過(guò)程有個(gè)更深入的理解。

1、產(chǎn)品解決方案代碼是如何被調(diào)用編譯的

在文件 buildliteBUILD.gn 配置文件中的構(gòu)建目標(biāo) //build/lite:product 的代碼片段如下,可以看出產(chǎn)品解決方案是被 //build/lite:product 調(diào)用的。其中⑴處的 ohos_build_target,由 hb build -T XX 構(gòu)建參數(shù)指定,一般不指定時(shí)為空。

  group("product") {
    deps = []

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

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

以 vendorgoodixgr5515_sk_iotlink_demo 為例,來(lái)了解下什么地方會(huì)調(diào)用編譯產(chǎn)品解決方案代碼。產(chǎn)品解決方案根目錄下有文件 vendorgoodixgr5515_sk_iotlink_demoohos.build,片段如下??梢钥吹剑凶酉到y(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"
}

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

  "product_gr5515_sk_iotlink_demo": [
    "product_gr5515_sk_iotlink_demo"
  ],

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

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

  # 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 構(gòu)建目標(biāo)又被 libkernel 構(gòu)建目標(biāo)、進(jìn)一步被名為 kernel 的構(gòu)建目標(biāo)調(diào)用,如下所示。內(nèi)核的 kernel 構(gòu)建目標(biāo)如何被調(diào)用,下一小節(jié)分析。

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

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

3、內(nèi)核代碼如何被調(diào)用編譯的

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

在生成的文件 outv200zrdisplay_demobuild_configskernelliteos_mBUILD.gn 中,會(huì)調(diào)用名為 kernel、build_kernel_image 的構(gòu)建目錄。怎么生成的這個(gè)文件,需要研究下 hb 的代碼,深入了解下后臺(tái)的機(jī)制,希望后續(xù)有時(shí)間可以繼續(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"
}

構(gòu)建目標(biāo) build_kernel_image 可以生成 bin 文件,該目標(biāo)依賴 copy_liteos,copy_liteos 依賴 liteos 構(gòu)建目標(biāo),該目標(biāo)會(huì)進(jìn)一步調(diào)用 //build/lite:ohos。//build/lite:ohos 文件會(huì)依次調(diào)用各個(gè)子系統(tǒng)和部件的構(gòu)建目標(biāo)。

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 定義如下。⑴處判斷芯片和開(kāi)發(fā)板是否是否進(jìn)行了文件夾解耦,如果開(kāi)發(fā)板路徑包含 “/board/”, 說(shuō)明 soc 和 board 進(jìn)行了解耦。根據(jù)是否解耦,依賴的 public 的配置集的位置是不同的,見(jiàn)⑵。在芯片、開(kāi)發(fā)板代碼目錄中的 BUILD.gn 文件中并沒(méi)有發(fā)現(xiàn) config (“public”),這個(gè)比較奇怪。

 # 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" ]
        }
    }
    }


審核編輯 黃宇

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

    關(guān)注

    459

    文章

    52505

    瀏覽量

    440765
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5680

    瀏覽量

    104688
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    679

    瀏覽量

    33982
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3854

    瀏覽量

    18604
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    使用OpenHarmonyNDK移植三方庫(kù)Speexdsp

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

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

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

    鴻蒙南向開(kāi)發(fā)—OpenHarmony技術(shù)編譯構(gòu)建框架

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

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

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

    OpenHarmony v3.1-Release編譯ModuleNotFound報(bào)錯(cuò)怎么解決

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

    OpenHarmony輕量和小型系統(tǒng)編譯構(gòu)建指導(dǎo)

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

    三步就能在OpenHarmony中實(shí)現(xiàn)車(chē)牌識(shí)別

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

    4步成功將三方庫(kù)——speexdsp移植OpenHarmony

    歸)進(jìn)行分享,他在完成了一個(gè)三方庫(kù)在OpenHarmony標(biāo)準(zhǔn)系統(tǒng)上的移植工作后,總結(jié)了以下經(jīng)驗(yàn)。四步實(shí)現(xiàn)三方庫(kù)移植:1、在Linux下編譯移植
    發(fā)表于 09-27 12:02

    剖析OpenHarmony3.0編譯構(gòu)建流程

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

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

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

    OpenHarmony應(yīng)用的編譯構(gòu)建過(guò)程

    2022 年 3 月 31 日發(fā)布了最新的 IDE 工具 DevEco Studio 3.0 Beta3,仔細(xì)閱讀文檔后發(fā)現(xiàn)最新 OpenHarmony 應(yīng)用的編譯構(gòu)建過(guò)程已經(jīng)公開(kāi)。
    的頭像 發(fā)表于 04-21 08:13 ?4351次閱讀

    OpenHarmony技術(shù)論壇:OpenHarmony移植技術(shù)分享

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

    鴻蒙OpenHarmony【標(biāo)準(zhǔn)系統(tǒng) 編譯】(基于RK3568開(kāi)發(fā)板)

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

    鴻蒙OpenHarmony開(kāi)發(fā):【編譯構(gòu)建指導(dǎo)】

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