OpenHarmony开发者论坛
标题:
【FAQ问题定位】模块如何单独编译构建
[打印本页]
作者:
诚迈_雨哥
时间:
2024-6-3 15:14
标题:
【FAQ问题定位】模块如何单独编译构建
[md]# 验证模块功能时能否不全量编译代码
# 背景
**答案是肯定的!**
众所周知,当前OpenHarmony模块十分庞大,非计算云全量编译代码十分耗时。如果修改、验证单一模块是没有必要全量编译的。注意镜像必须和本地代码日期尽量一致,代码可以稍晚于镜像。核心方法就是从每日构建下载烧录镜像,本地编译单一模块,烧录镜像,推送单一模块进行验证。以下以RK3568开发板,主线代码为例进行说明。
# 一、单模块编译准备
## 1. 拉取全量代码
即使编译单一模块建议要拉取全量代码
## 2. 从每日构建下载和本地代码日期一致的镜像
OpenHarmony 每日构建链接:
http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist
## 3. 编译单一模块命令构成原理
### 1). 编译子系统命令构成
![compile_subsystem_command.PNG](
https://forums-obs.openharmony.c ... 79ahymkyzvlppo0.png
"compile_subsystem_command.PNG")
![](./figures/compile_subsystem_command.png)
### 2). 子系统生成目录
![out_subsystem_so.PNG](
https://forums-obs.openharmony.c ... 7jajisqj591j1ah.png
"out_subsystem_so.PNG")
![](./figures/out_subsystem_so.png)
### 3). 单元测试 bin生成目录
![out_ut_so.PNG](
https://forums-obs.openharmony.c ... uce0u1lhou222cz.png
"out_ut_so.PNG")
![](./figures/out_ut_so.png)
## 4. 常见问题
### 1). 编译目标库名,编译时不认识,要求修改为BUILD.gn中的库名
#### 出错信息
![libso_error.PNG](
https://forums-obs.openharmony.c ... gc6vqondqhm4h77.png
"libso_error.PNG")
![](./figures/libso_error.png)
#### 编译命令
`./build.sh --product-name rk3568 --build-target libvibrator_decoder `
#### 编译输出
![libso_ok.PNG](
https://forums-obs.openharmony.c ... l6lpj6lmwz5glb5.png
"libso_ok.PNG")
![](./figures/libso_ok.png)
**说明**: 不含.z.so
### 2). 编译目标库名,编译时不认识,要求修改为BUILD.gn中的库名
#### 出错信息
![out_libdeviceagent-error.PNG](
https://forums-obs.openharmony.c ... 36zaz5j00rdbm9d.png
"out_libdeviceagent-error.PNG")
![](./figures/out_libdeviceagent-error.png)
#### 编译命令
`./build.sh --product-name rk3568 --build-target deviceagent`
#### 编译输出
![out_deviceagent.PNG](
https://forums-obs.openharmony.c ... q8m1donu8n5d2tz.png
"out_deviceagent.PNG")
![](./figures/out_deviceagent.png)
# 二、实践步骤
## 1. 编译miscdevice 组件
### 定位组件名称
① 子系统代码目录
② 子系统配置信息
③ name为组件名称,subsystem为子系统名称
![COMPILE_subsystem.PNG](
https://forums-obs.openharmony.c ... 8ua2d0azf08x6mk.png
"COMPILE_subsystem.PNG")
![](./figures/COMPILE_subsystem.png)
### 编译命令
```
./build.sh --product-name rk3568 --build-target miscdevice
```
### 编译输出
④ 组件编译指令
⑤ 组件so生成目录,sensors为子系统名称,miscdevice为组件名称如上所述
![COMPILE_subsystem_out.PNG](
https://forums-obs.openharmony.c ... dffe3p7zz5uineo.png
"COMPILE_subsystem_out.PNG")
![](./figures/COMPILE_subsystem_out.png)
## 2. 修改了devicestatus_agent.cpp 文件,编译所在so
### 定位所在库名
① 目标源文件
② 距离目标文件最近的BUILD.gn
③ BUILD.gn 中定义的目标产物,生成的so库名,不包括开始的'lib'和末尾的'.z.so'
④ 所在子系统\所在的组件
![find_gn0.PNG](
https://forums-obs.openharmony.c ... 5xzk2vivcev90q8.png
"find_gn0.PNG")
![](./figures/find_gn0.png)
### 编译命令
```
./build.sh --product-name rk3568 --build-target deviceagent
```
**说明**:命令末尾添加上 --fast-rebuild, 除过首次,之后编译速度会大大加快!
### 编译输出
![out_deviceagent.PNG](
https://forums-obs.openharmony.c ... 5jv0yvvsr5wppup.png
"out_deviceagent.PNG")
![](./figures/libso_ok.png)
## 2. 编译对应模块UT
运行 UT 会在单元测试文档进行详细说明。
### 定位所在bin 名称
① 目标源文件
② 距离目标文件最近的BUILD.gn
③ BUILD.gn 中定义的目标产物,生成的bin
④ 生成物bin的输出目录,如后面图片所示
![local_ut.PNG](
https://forums-obs.openharmony.c ... qzxjo3xzubrkxx9.png
"local_ut.PNG")
![](./figures/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](
https://forums-obs.openharmony.c ... b8ybz2owzo6e0iw.png
"unittest.PNG")
![](./figures/unittest.png)
## 3. 烧录镜像
RK3568烧录镜像参照链接:
https://forums.openharmony.cn/fo ... thread&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`
# 三、结论
有所求,才有所获。当你时刻想提高工作、学习效率时,就会产生各种各样的问题,找到了这些问题的答案,并应用它们,必定会让你的效率事倍功半!祝小伙伴们工作顺利!
[/md]
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5