在上一篇帖子中,我们学习了Openharmony轻量系统的编译构建https://ost.51cto.com/posts/25293,其中包括了子系统,组件的核心理念、编译构建系统的配置规则等等。下面我们来学习一下编译构建系统的使用。
案例:新增组件
1、根据功能准备开发套件
笔者使用的是润和智能家居开发套件,连接主板和核心板。
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
2、编写/合入组件源码
编写组件源码:applications\sample\component_demo\demo.c。
在applications/sample下新建component_demo文件夹。
在component_demo文件夹下新建文件demo.c。
编写如下代码:
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
#include
#include "ohos_init.h"
void entry(void)
{
printf("I am a component.\r\n");
}
SYS_RUN(entry);
其中:
- #include “ohos_init.h” 是Openharmony的特有头文件,它在utils\native\lite\include\ohos_init.h中,在开发中,它提供了一系列入口,用于初始化服务(services)和功能(features)。
- SYS_RUN(entry) 的意思是让entry函数以“优先级2”在系统启动过程中的“阶段4.system startup”阶段执行。
3、编写组件编译脚本
编写组件编译脚本:在applications\sample\component_demo下新建BUILD.gn文件,编写如下代码。
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
static_library("TestComponent"){
sources = [ "demo.c" ]
include_dirs = [
"//utils/native/lite/include",
]
}
- static_library为静态库,“TestComponent"是库名称,最终被编译为"libTestComponent.a”。
- sources里面存放的是源文件。
- include_dirs里存放的是include目录,包括"ohos_init.h"等头文件。
单独编译目标
在组件源码和编译脚本完成之后,我们可以尝试单独编译目标。
首先我们来看一下hb的用法:
打开虚拟机,进去Openharmony的源码目录,鼠标右键选择在终端中打开,输入如下命令:
hb build -h
显示如下:
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
语法:
hb build -T 路径:目标
在上面的例子中:
语法为:
hb build -f -T //applications/sample/component_demo:TestComponent
注意:-T是要大写的。
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
可以看到,编译成功完成。
4、添加组件定义
作为一个组件,必须要注册到一个子系统中,Openharmony才会意识到你的存在。
具体内容可以看上一篇帖子:https://ost.51cto.com/posts/25293找到build\lite\components\applications.json
添加如下定义:
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
{
"component":"TestComponent",
"description":"A test component",
"optional":"true",
"dirs":[
"applications/sample/component_demo"
],
"targets":[
"//applications/sample/component_demo:TestComponent"
],
"adapted_kernel":["liteos_m"]
},
添加的内容解释如下:
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
5、将组件配置到产品
找到vendor\hisilicon\hispark_pegasus\config.json,添加如下配置:
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
接着我们再来单独编译组件,这与前面编译目标的效果一样(目标就是一个组件),这样会快捷。
语法:
hb build 组件名称
在终端中输入如下命令
hb build -f TestComponent
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
编译结果如上。
这样就不用像之前那样想要编译一个组件,还需要它的路径,会更快捷方便。
6、编译产品
在轻量系统中,单独编译的目标或者是组件是不能够独立运行的,这种编译方式适合发现编译错误,但是要烧录运行的话,我们要进行固件的全量编译(hb build -f)。
接下来我们进行全量编译:
执行以下命令:
hb build -f
编译成功结果如下:
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
7、烧录固件
下面就到了我们熟悉的地方,烧录固件,笔者这里采用的是Hiburn烧录工具,相关细节可以看我这篇贴子:https://ost.51cto.com/posts/25292下面给出烧录成功之后的样子:
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
烧录完成后,点击disconnect,然后关闭Hiburn烧录工具。
8、运行
运行我们采用的是MobaXterm串口终端工具。相关细节可以看我这篇帖子:https://ost.51cto.com/posts/25292下面给出运行结果:
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区
可以看到,成功的编译运行了刚刚的component_demo组件.总结:新增组件的案例就是按照这1-8个步骤来完成。再次附上子系统的构建模型,希望大家能有更深的理解。
【Openharmony轻量设备开发】润和智能家居套件-编译构建系统的使用-开源基础软件社区