色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

剖析OpenHarmony3.0編譯構建流程

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

掃碼添加小助手

加入工程師交流群

早就打算研究下 OH3.0 的編譯框架了,最近一直在搞移植,總算有點進展了,抽個空來分析下 3.0 的編譯框架。

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

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

以前是通過 shell 腳本來調用,現在是通過 gn 和 ninja 來調用。主要文件在 buildohosimages 這個文件夾下。

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

增加編譯參數

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

這句的意思約等于在執行默認編譯命令 ./build.sh --product-name Hi3516DV300 會有個默認的參數 --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 會使用 action 運行一個腳本來生成一個文件,但是這里使用的是 action_with_pydeps,應該也是內置的目標類型。查看官方手冊是這么說明的:

輸入和文件,將操作讀取(或執行)的所有文件列為 inputs:

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

  • 非系統 Python 導入是輸入!對于導入此類模塊的腳本,請使用 action_with_pydeps 來確保將所有依賴的 Python 文件捕獲為輸入。

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

調用 python 腳本

既然知道了 img 鏡像是由 buildohosimagesuild_image.py 來創建的,那就來分析下這個 python 腳本。
ifos.path.exists(args.output_image_path):
os.remove(args.output_image_path)#刪除之前生成的鏡像文件夾
ifargs.image_name=='userdata':
_prepare_userdata(args.input_path)#準備好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)#準備好system.img需要的文件
elifargs.image_name=='updater':
_prepare_updater(args.input_path)#準備好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)#而真正制作鏡像使用的下面的函數
===================================================================
#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根據文件系統類型,分別調用對應的python腳本
elif"f2fs"inmk_configs:
mkfs_tools="mkf2fsimage.py"
fs_type="f2fs"
===================================================================
#buildohosimagesmkimagemkextimage.py#制作ext4文件系統
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:制作文件系統
===================================================================
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:制作鏡像文件

無論前面執行了什么操作,最終都是為了執行 mke2fs、e2fsdroid。

關于這兩個命令:

  • mke2fs:Linux 下的命令,用于建立 ext 文件系統。

  • e2fsdroid:來自三方庫,third_partye2fsprogs。

詳情可以參考:

http://e2fsprogs.sourceforge.net
編輯:jq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11506

    瀏覽量

    213390
  • 編譯
    +關注

    關注

    0

    文章

    676

    瀏覽量

    33908
  • OpenHarmony
    +關注

    關注

    29

    文章

    3847

    瀏覽量

    18440

原文標題:OpenHarmony3.0編譯構建流程!

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    貢獻 OpenHarmony 庫關鍵配置

    存放資源文件,如圖片、多媒體、字符串等 │└─module.json5// 模塊配置文件,包含當前HAR的配置信息 ├─build-profile.json5// Hvigor編譯構建所需的配置文件
    發表于 05-28 13:46

    在 Windows 上編譯 KiCad

    “?Ethan 同學為我們分享了在 Windows 編譯 KiCad 的準備工作、操作步驟及閉坑指南。以下是核心的操作視頻及 PPT,完整的直播視頻后續分享給大家!?” 流程概要 準備工作 編譯器篇
    的頭像 發表于 03-28 11:23 ?341次閱讀
    在 Windows 上<b class='flag-5'>編譯</b> KiCad

    KiCad直播活動(三):在 Windows上編譯KiCad 手把手教您編譯/構建 KiCad 源碼

    Developer Ethan 同學,手把手教您編譯/構建 KiCad 源碼: 開發工具安裝 環境變量配置 使用 VS2022 構建 KiCad 參與直播的小伙伴還有機會獲得 KiCon Badge
    的頭像 發表于 03-24 11:14 ?756次閱讀
    KiCad直播活動(三):在 Windows上<b class='flag-5'>編譯</b>KiCad 手把手教您<b class='flag-5'>編譯</b>/<b class='flag-5'>構建</b> KiCad 源碼

    迅為RK3568開發板篇OpenHarmony實操HDF驅動配置LED-編譯源碼

    重新編譯 Openharmony4.1 源碼,如下所示: ./build.sh --product-name rk3568 --ccache 或者單獨編譯部件 ./build.sh
    發表于 02-10 10:23

    2K0300 OpenHarmony源碼構建指南

    2K0300 OpenHarmony源碼構建參考如下 2K0300先鋒派OpenHarmony源碼構建指南 2K0300 源碼編譯wiki
    發表于 02-05 09:36

    迅為RK3568開發板篇OpenHarmony實操HDF驅動控制LED-添加內核編譯

    編譯內核時將該 HDF 驅動編譯到鏡像中,接下來編寫驅動編譯腳本 Makefile,代碼如下所示: 加入編譯體系,填加模塊目錄到 drivers/hdf_core/adapter/kh
    發表于 01-22 10:35

    OpenHarmony-5.0.0的RK3588始終編譯不過去,有大佬有開源方案可以參考一下嗎?

    目前把openHarmony的5.1版本的RK3588編譯過去了 但是openHarmony-5.0.0的RK3588始終編譯不過去,有大佬有開源方案可以參考一下嗎?
    發表于 01-13 16:04

    OpenHarmony源碼編譯后燒錄鏡像教程,RK3566鴻蒙開發板演示

    本文介紹瑞芯微主板/開發板編譯OpenHarmony源碼后燒錄鏡像的教程,觸覺智能Purple Pi OH鴻蒙開發板演示。搭載了瑞芯微RK3566四核處理器,樹莓派卡片電腦設計,支持開源鴻蒙OpenHarmony3.2-5.0系
    的頭像 發表于 12-30 10:08 ?794次閱讀
    <b class='flag-5'>OpenHarmony</b>源碼<b class='flag-5'>編譯</b>后燒錄鏡像教程,RK3566鴻蒙開發板演示

    芯海科技系列OpenHarmony3.1芯片支持智慧生態構建

    隨著OpenHarmony3.1的正式發布,芯海科技作為OpenHarmony生態的重要參與者,及時推出了兩款與系統適配的新品:健康測量CS1262芯片和無線連接CST85F01模組,為智慧生態的構建貢獻了芯海力量。
    的頭像 發表于 12-17 17:25 ?530次閱讀
    芯海科技系列<b class='flag-5'>OpenHarmony</b>3.1芯片支持智慧生態<b class='flag-5'>構建</b>

    基于系統設備樹的構建流程

    用于構建 AMD embeddedsw 組件的舊方法將 .xsa 用作來自硬件人員的交接文件,并將 mdd、mld 和 mss 文件用于不同的軟件配置。這使得舊方法依賴于 AMD 專屬工具,如軟件
    的頭像 發表于 11-01 13:38 ?528次閱讀

    openharmony移植AT32F407編譯時錯誤

    openharmony上移植AT32F407,hb build后出現鏈接錯誤 [OHOS ERROR] /home/sven/openharmony/env_setup
    發表于 08-18 17:04

    RT-Thread Studio構建和重新構建的不同,一般我們編譯工程時用哪個?

    想請教在RT-Thread Studio中,構建和重新構建的不同,一般我們編譯工程時用哪個,謝謝!
    發表于 07-25 07:38

    鴻蒙OpenHarmony南向/北向快速開發教程-迅為RK3568開發板

    源碼 P3_初次編譯OpenHarmony源碼 P4_OpenHarmony鏡像簡介以及燒寫工具配置 P5_優化開發流程-搭建windows開發環境 P6_優化開發
    發表于 07-23 10:44

    AI編譯器技術剖析

    隨著人工智能技術的飛速發展,AI編譯器作為一種新興的編譯技術逐漸進入人們的視野。AI編譯器不僅具備傳統編譯器的功能,如將高級語言編寫的源代碼轉換為機器可執行的代碼,還融入了人工智能技術
    的頭像 發表于 07-17 18:28 ?2602次閱讀

    開源鴻蒙 編譯OpenHarmony輕量系統QEMU RISC-V版本

    本文將介紹如何為QEMU RISC-V虛擬平臺構建OpenHarmony輕量系統。得益于QEMU的CPU指令集模擬執行能力,該方法可以在沒有開發板的情況下調試和運行OpenHarmony系統源碼。本文介紹的該方法,可以用于
    的頭像 發表于 07-15 10:36 ?1746次閱讀
    開源鴻蒙 <b class='flag-5'>編譯</b><b class='flag-5'>OpenHarmony</b>輕量系統QEMU RISC-V版本
    主站蜘蛛池模板: 扒开老师大腿猛进AAA片软件 | 97视频在线播放 | 成人天堂资源WWW在线 | 色色噜一噜 | 国产麻豆精品传媒AV国产在线 | 荷兰少归BVBV| 青青青青青青草 | 免费毛片网站在线观看 | 蜜臀AV99无码精品国产专区 | 2020美女视频黄频大全视频 | 国产精品久久久久久人妻香蕉 | 日韩亚洲人成在线 | 伊人草久久 | 美女被打开了屁股进去的视频 | 东北老妇xxxxhd | 久九九精品免费视频 | 一扒二脱三插片在线观看 | 狠狠色狠狠色综合日日2019 | 国产成人精品免费视频大全可播放的 | 嗯啊哈啊好棒用力插啊 | 光溜溜的美女直播软件 | 日本美女bb | 97在线视频免费人妻 | 国产精品一区二区制服丝袜 | 亚洲精品偷拍影视在线观看 | 我要女人的全黄录像 | 欧洲美女高清一级毛片 | 18日本人XXXXXX18 | 九九热视频免费观看 | 国产人妻人伦精品A区 | 久久水蜜桃亚洲AV无码精品偷窥 | 大地影院日本韩国电影免费观看 | 国产人妻麻豆蜜桃色在线 | 成人特级毛片 | 久久精品亚洲国产AV涩情 | av先锋影音资源男人站 | sao虎影院桃红视频在线观看 | 午夜亚洲精品不卡在线 | 一个人在线观看视频免费 | 产传媒61国产免费 | 伊人草|

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品