哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

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

OpenHarmony技術(shù)社區(qū) ? 來(lái)源:HarmonyOS技術(shù)社區(qū) ? 作者:亮子力 ? 2021-12-07 10:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

早就打算研究下 OH3.0 的編譯框架了,最近一直在搞移植,總算有點(diǎn)進(jìn)展了,抽個(gè)空來(lái)分析下 3.0 的編譯框架。

大體看了下和 2.0 的差別不是特別大:《OpenHarmony 2.0 Canary編譯構(gòu)建流程》。

OHOS3.0 的打包鏡像腳本由原來(lái) 2.0 的 buildadapteruild_image.sh,全部修改替換為 buildohosimagesuild_image.py,將打包 image 鏡像的部分制作成 build_target。

以前是通過(guò) shell 腳本來(lái)調(diào)用,現(xiàn)在是通過(guò) gn 和 ninja 來(lái)調(diào)用。主要文件在 buildohosimages 這個(gè)文件夾下。

沒(méi)有修改的部分就不說(shuō)了,有需要的可以看我之前的帖子 這篇主要說(shuō)下不一樣的地方,看 OH3.0 是如何將編譯好的文件打包成鏡像的。

增加編譯參數(shù)

3.0 之后在 builduild_scriptsuild_common.sh 增加了 build_cmd+=" build_target=images"。

這句的意思約等于在執(zhí)行默認(rèn)編譯命令 ./build.sh --product-name Hi3516DV300 會(huì)有個(gè)默認(rèn)的參數(shù) --build-target images。

具體流程是這樣的:

builduild_scriptsuild_common.sh→buildcoregnBUILD.gn→buildohosimagesBUILD.gn
action_with_pydeps("${_platform}_${_image_name}_image"){
script="http://build/ohos/images/build_image.py"
depfile="$target_gen_dir/$target_name.d"
deps=["http://build/ohos/packages:${_platform}_install_modules"]

image_config_file=
"http://build/ohos/images/mkimage/${_image_name}_image_conf.txt"
output_image_file="$current_platform_dir/images/${_image_name}.img"

image_input_path="$current_platform_dir/${_image_name}"
if(_image_name=="userdata"){
image_input_path="$current_platform_dir/data"
}

sources=[
image_config_file,
system_module_info_list,
system_modules_list,
]
outputs=[output_image_file]
args=[
"--depfile",
rebase_path(depfile,root_build_dir),
"--image-name",
_image_name,
"--input-path",
rebase_path(image_input_path,root_build_dir),
"--image-config-file",
rebase_path(image_config_file,root_build_dir),
"--output-image",
rebase_path(output_image_file,root_build_dir),
"--build-image-tools-path",
rebase_path(build_image_tools_path,root_build_dir),
]
if(sparse_image){
args+=["--sparse-image"]
}
}

通常情況下,gn 會(huì)使用 action 運(yùn)行一個(gè)腳本來(lái)生成一個(gè)文件,但是這里使用的是 action_with_pydeps,應(yīng)該也是內(nèi)置的目標(biāo)類(lèi)型。查看官方手冊(cè)是這么說(shuō)明的:

輸入和文件,將操作讀?。ɑ驁?zhí)行)的所有文件列為 inputs:

  • 僅按從屬目標(biāo)列出輸入是不夠的。它們必須由使用它們的目標(biāo)直接列出,或者由 depfile 添加。

  • 非系統(tǒng) Python 導(dǎo)入是輸入!對(duì)于導(dǎo)入此類(lèi)模塊的腳本,請(qǐng)使用 action_with_pydeps 來(lái)確保將所有依賴(lài)的 Python 文件捕獲為輸入。

前面還定義了一個(gè) image_list,然后使用 foreach 執(zhí)行 action_with_pydeps,要生成幾個(gè) img 文件,就執(zhí)行幾次 action_with_pydeps。
image_list=[
"system",
"vendor",
"userdata",
"updater",
]
foreach(_image_name,image_list){......}

調(diào)用 python 腳本

既然知道了 img 鏡像是由 buildohosimagesuild_image.py 來(lái)創(chuàng)建的,那就來(lái)分析下這個(gè) python 腳本。
ifos.path.exists(args.output_image_path):
os.remove(args.output_image_path)#刪除之前生成的鏡像文件夾
ifargs.image_name=='userdata':
_prepare_userdata(args.input_path)#準(zhǔn)備好userdata.img需要的文件
ifos.path.isdir(args.input_path):
_make_image(args)
_dep_files=[]
for_root,_,_filesinos.walk(args.input_path):
for_filein_files:
_dep_files.append(os.path.join(_root,_file))
build_utils.write_depfile(args.depfile,
args.output_image_path,
_dep_files,
add_pydeps=False)
===================================================================
def_make_image(args):
ifargs.image_name=='system':
_prepare_root(args.input_path)#準(zhǔn)備好system.img需要的文件
elifargs.image_name=='updater':
_prepare_updater(args.input_path)#準(zhǔn)備好updater.img需要的文件
image_type="raw"
ifargs.sparse_image:
image_type="sparse"
mk_image_args=[
args.input_path,args.image_config_file,args.output_image_path,
image_type
]
env_path="../../build/ohos/images/mkimage"
ifargs.build_image_tools_path:
env_path='{}:{}'.format(env_path,args.build_image_tools_path)
os.environ['PATH']='{}:{}'.format(env_path,os.environ.get('PATH'))
mkimages.mk_images(mk_image_args)#而真正制作鏡像使用的下面的函數(shù)
===================================================================
#buildohosimagesmkimagemkimages.py
defmk_images(args):
......
if"system.img"indevice:
src_dir=build_rootdir(src_dir)
mkfs_tools,mk_configs=load_config(config_file)
mk_configs=src_dir+""+device+""+mk_configs

res=run_cmd(mkfs_tools+""+mk_configs)#制作鏡像命令使用的是mkfs_tools
===================================================================
if"ext4"inmk_configs:
fs_type="ext4"
mkfs_tools="mkextimage.py"#而mkfs_tools根據(jù)文件系統(tǒng)類(lèi)型,分別調(diào)用對(duì)應(yīng)的python腳本
elif"f2fs"inmk_configs:
mkfs_tools="mkf2fsimage.py"
fs_type="f2fs"
===================================================================
#buildohosimagesmkimagemkextimage.py#制作ext4文件系統(tǒng)
defbuild_run_mke2fs(args):
.....
blocks=int(int(args.fs_size)/BLOCKSIZE)
mke2fs_cmd+=("mke2fs"+str(mke2fs_opts)+"-t"+FS_TYPE+"-b"
+str(BLOCKSIZE)+""+args.device+""+str(blocks))
res=run_cmd(mke2fs_cmd)# mke2fs:制作文件系統(tǒng)
===================================================================
defbuild_run_e2fsdroid(args):
......
e2fsdroid_cmd+=("e2fsdroid"+e2fsdroid_opts+"-f"+
args.src_dir+"-a"+args.mount_point+
""+args.device)
res=run_cmd(e2fsdroid_cmd)# e2fsdroid:制作鏡像文件

無(wú)論前面執(zhí)行了什么操作,最終都是為了執(zhí)行 mke2fs、e2fsdroid。

關(guān)于這兩個(gè)命令:

  • mke2fs:Linux 下的命令,用于建立 ext 文件系統(tǒng)。

  • e2fsdroid:來(lái)自三方庫(kù),third_partye2fsprogs。

詳情可以參考:

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

    關(guān)注

    88

    文章

    11806

    瀏覽量

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

    關(guān)注

    0

    文章

    696

    瀏覽量

    35264
  • OpenHarmony
    +關(guān)注

    關(guān)注

    33

    文章

    3970

    瀏覽量

    21336

原文標(biāo)題:OpenHarmony3.0編譯構(gòu)建流程!

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Android 11(i.MX8MM,內(nèi)核 5.4.70)– CLANG 的 QCA9377 WiFi 藍(lán)牙驅(qū)動(dòng)程序編譯問(wèn)題求解

    在 Linux 內(nèi)核 5.4.70 中,使用 GCC 交叉編譯,我們能夠獨(dú)立編譯模塊,生成 因此,WiFi 和藍(lán)牙功能都可以正常工作。 但是,在 Android 11 下,構(gòu)建系統(tǒng)默認(rèn)為 CLANG
    發(fā)表于 04-01 06:12

    簡(jiǎn)單高效的鴻蒙編譯提速技巧

    在鴻蒙應(yīng)用開(kāi)發(fā)中編譯構(gòu)建是開(kāi)發(fā)者最頻繁的操作,每一次編譯提速都能顯著提升項(xiàng)目整體開(kāi)發(fā)效率。本次分享幾個(gè)簡(jiǎn)單卻高效的鴻蒙編譯提速技巧,從編譯
    的頭像 發(fā)表于 03-04 16:09 ?216次閱讀
    簡(jiǎn)單高效的鴻蒙<b class='flag-5'>編譯</b>提速技巧

    基于凌羽派的OpenHarmony北向應(yīng)用開(kāi)發(fā):Hello World 示例應(yīng)用

    本示例是基于 OpenHarmony 開(kāi)發(fā)的第一個(gè)簡(jiǎn)單應(yīng)用,用于展示如何創(chuàng)建、構(gòu)建和部署一個(gè)基本的應(yīng)用程序。 環(huán)境配置如下所示: API:18 SDK
    發(fā)表于 02-25 11:25

    基于凌羽派的OpenHarmony北向應(yīng)用開(kāi)發(fā):Hello World 示例應(yīng)用

    本示例是基于OpenHarmony開(kāi)發(fā)的第一個(gè)簡(jiǎn)單應(yīng)用,用于展示如何創(chuàng)建、構(gòu)建和部署一個(gè)基本的應(yīng)用程序。環(huán)境配置如下所示:API:18SDK:OpenHarmony-v5.
    的頭像 發(fā)表于 02-25 10:23 ?303次閱讀
    基于凌羽派的<b class='flag-5'>OpenHarmony</b>北向應(yīng)用開(kāi)發(fā):Hello World 示例應(yīng)用

    #OpenHarmony HDC調(diào)試

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:46:28

    #OpenHarmony 開(kāi)發(fā)環(huán)境準(zhǔn)備

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:44:31

    #OpenHarmony 鏡像燒錄

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:42:36

    #OpenHarmony 系統(tǒng)概述

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:39:20

    #OpenHarmony Hello World應(yīng)用以及部署

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:32:52

    【瑞薩RA × Zephyr評(píng)測(cè)】Zephyr RTOS保姆級(jí)環(huán)境構(gòu)建編譯下載踩坑版

    筆者介紹一下Zephyr RTOS 保姆級(jí)環(huán)境構(gòu)建編譯下載
    的頭像 發(fā)表于 01-10 10:03 ?9381次閱讀
    【瑞薩RA × Zephyr評(píng)測(cè)】Zephyr RTOS保姆級(jí)環(huán)境<b class='flag-5'>構(gòu)建</b>與<b class='flag-5'>編譯</b>下載踩坑版

    TUSB9261:USB 3.0 到 SATA 橋接器的技術(shù)剖析與應(yīng)用指南

    TUSB9261:USB 3.0 到 SATA 橋接器的技術(shù)剖析與應(yīng)用指南 在當(dāng)今的電子設(shè)備領(lǐng)域,數(shù)據(jù)傳輸?shù)母咝院头€(wěn)定性至關(guān)重要。TUSB9261 作為一款 ARM? Cortex? M3
    的頭像 發(fā)表于 12-24 10:35 ?578次閱讀

    電子工程師必看:TUSB501-Q1 USB 3.0轉(zhuǎn)接驅(qū)動(dòng)器深度剖析

    電子工程師必看:TUSB501-Q1 USB 3.0轉(zhuǎn)接驅(qū)動(dòng)器深度剖析 在電子設(shè)備高速發(fā)展的今天,USB 3.0技術(shù)憑借其高速的數(shù)據(jù)傳輸能力,成為了眾多設(shè)備的標(biāo)配。而TUSB501-Q1作為一款具有
    的頭像 發(fā)表于 12-19 11:05 ?419次閱讀

    SN75LVPE3410:四通道PCI - Express 3.0線(xiàn)性轉(zhuǎn)接驅(qū)動(dòng)器的深度剖析

    SN75LVPE3410:四通道PCI - Express 3.0線(xiàn)性轉(zhuǎn)接驅(qū)動(dòng)器的深度剖析 在電子設(shè)計(jì)領(lǐng)域,高速數(shù)據(jù)傳輸?shù)男枨笕找嬖鲩L(zhǎng),PCI - Express技術(shù)作為其中的關(guān)鍵力量,不斷推動(dòng)著
    的頭像 發(fā)表于 12-16 10:55 ?461次閱讀

    貢獻(xiàn) OpenHarmony 庫(kù)關(guān)鍵配置

    存放資源文件,如圖片、多媒體、字符串等 │└─module.json5// 模塊配置文件,包含當(dāng)前HAR的配置信息 ├─build-profile.json5// Hvigor編譯構(gòu)建所需的配置文件
    發(fā)表于 05-28 13:46
    廉江市| 南靖县| 潮安县| 富宁县| 禄丰县| 封丘县| 宁国市| 阿克陶县| 民和| 横峰县| 肥乡县| 雷州市| 喀喇沁旗| 宜君县| 三门县| 乌苏市| 沙洋县| 柳林县| 成都市| 突泉县| 徐闻县| 甘肃省| 五常市| 上思县| 永济市| 于都县| 嘉峪关市| 黄浦区| 保靖县| 岐山县| 唐山市| 吉水县| 嵩明县| 香港| 寿阳县| 祁阳县| 富宁县| 青海省| 兴城市| 九江县| 忻城县|