请选择 进入手机版 | 继续访问电脑版

[经验分享] 【FAQ问题定位】模块如何单独编译构建 原创

诚迈_雨哥 显示全部楼层 发表于 2024-6-3 15:14:58

验证模块功能时能否不全量编译代码

背景

答案是肯定的!

众所周知,当前OpenHarmony模块十分庞大,非计算云全量编译代码十分耗时。如果修改、验证单一模块是没有必要全量编译的。注意镜像必须和本地代码日期尽量一致,代码可以稍晚于镜像。核心方法就是从每日构建下载烧录镜像,本地编译单一模块,烧录镜像,推送单一模块进行验证。以下以RK3568开发板,主线代码为例进行说明。

一、单模块编译准备

1. 拉取全量代码

即使编译单一模块建议要拉取全量代码

2. 从每日构建下载和本地代码日期一致的镜像

OpenHarmony 每日构建链接: http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist

3. 编译单一模块命令构成原理

1). 编译子系统命令构成

compile_subsystem_command.PNG

2). 子系统生成目录

out_subsystem_so.PNG

3). 单元测试 bin生成目录

out_ut_so.PNG

4. 常见问题

1). 编译目标库名,编译时不认识,要求修改为BUILD.gn中的库名

出错信息

libso_error.PNG

编译命令

./build.sh --product-name rk3568 --build-target libvibrator_decoder

编译输出

libso_ok.PNG

说明: 不含.z.so

2). 编译目标库名,编译时不认识,要求修改为BUILD.gn中的库名

出错信息

out_libdeviceagent-error.PNG

编译命令

./build.sh --product-name rk3568 --build-target deviceagent

编译输出

out_deviceagent.PNG

二、实践步骤

1. 编译miscdevice 组件

定位组件名称

① 子系统代码目录 ② 子系统配置信息 ③ name为组件名称,subsystem为子系统名称

COMPILE_subsystem.PNG

编译命令

./build.sh --product-name rk3568 --build-target miscdevice

编译输出

④ 组件编译指令 ⑤ 组件so生成目录,sensors为子系统名称,miscdevice为组件名称如上所述

COMPILE_subsystem_out.PNG

2. 修改了devicestatus_agent.cpp 文件,编译所在so

定位所在库名

① 目标源文件 ② 距离目标文件最近的BUILD.gn ③ BUILD.gn 中定义的目标产物,生成的so库名,不包括开始的'lib'和末尾的'.z.so' ④ 所在子系统\所在的组件

find_gn0.PNG

编译命令

./build.sh --product-name rk3568 --build-target deviceagent

说明:命令末尾添加上 --fast-rebuild, 除过首次,之后编译速度会大大加快!

编译输出

out_deviceagent.PNG

2. 编译对应模块UT

运行 UT 会在单元测试文档进行详细说明。

定位所在bin 名称

① 目标源文件 ② 距离目标文件最近的BUILD.gn ③ BUILD.gn 中定义的目标产物,生成的bin ④ 生成物bin的输出目录,如后面图片所示

local_ut.PNG

编译命令

绝对路径

./build.sh --product-name rk3568 --build-target base/msdp/device_status/frameworks/native/interaction/test/unittest:InteractionManagerTest

相对路径

./build.sh --product-name rk3568 --build-target InteractionManagerTest

说明:命令末尾添加上 --fast-rebuild, 除过首次,之后编译速度会大大加快!

编译输出

① 单独编译一个bin的指令 ② 关于单元测试bin输出的默认目录 ③ 所在组件名称

unittest.PNG

3. 烧录镜像

RK3568烧录镜像参照链接: https://forums.openharmony.cn/forum.php?mod=viewthread&tid=2143 一般仅仅烧录一次,除非更换镜像。

4. 推送模块so等

关于InteractionManagerTest等测试bin文件和HAP的推送、执行会在我的其他文档中进行说明,以下以so的推送为例进行说明。

步骤1,确定修改的so, bin, hap所在运行系统的目录

例如:替换这个文件 libinteraction_drag.z.so,按如下方法查找

>hdc shell
# ls
bin        config       eng_system  lost+found     storage   tmp
chip_ckm   data         etc         mnt            sys       updater
chip_prod  dev          init        module_update  sys_prod  vendor
chipset    eng_chipset  lib         proc           system
find ./lib/ ./system/lib/ -name "libinteraction_drag.z.so"
./lib/libinteraction_drag.z.so
./system/lib/libinteraction_drag.z.so

步骤2,推送这些被修改的文件

细分为 “挂载”,“推送”

hdc shell mount -o rw,remount / 
hdc file send Z:\code_t62_0322\out\rk3568\msdp\device_status\libinteraction_drag.z.so ./system/lib/
hdc file send Z:\code_t62_0322\out\rk3568\msdp\device_status\libinteraction_drag.z.so ./lib/

步骤3,重启板卡

按键 reset,或者执行 hdc shell reboot 以上步骤2-3完整脚本

hdc shell mount -o rw,remount / 
hdc file send Z:\code\out\rk3568\msdp\device_status\libinteraction_drag.z.so ./system/lib/
hdc file send Z:\code\out\rk3568\msdp\device_status\libinteraction_drag.z.so ./lib/
hdc shell power-shell setmode 602
pause
hdc shell reboot

步骤4,更新完成,开始验证

始终亮屏设置 hdc shell power-shell setmode 602

三、结论

有所求,才有所获。当你时刻想提高工作、学习效率时,就会产生各种各样的问题,找到了这些问题的答案,并应用它们,必定会让你的效率事倍功半!祝小伙伴们工作顺利!

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部