1. 目的
编译命令行工具 HelloWorld,测试编译环境及项目配置
开发硬件环境:树莓派 3B+
2. 官方开发文档
根据开发硬件,选择文档标准系统编译构建指导(在这费了半天劲,找错了相关文档)
2.1. 基本概念
- 平台
开发板和内核的组合,不同平台支持的子系统和组件不同。平台基于硬件和内核,在项目中,~/ohos/openharmony/vendor/rpi3 目录下有 rpi 平台下相关的配置;软件的自定义的配置可以通过~/ohos/openharmony/device/rpi3 定制 - 子系统
OpenHarmony 整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或组件。子系统是一个逻辑概念,它具体由对应的组件构成。我们这次的实现方式为在~/ohos/openharmony/device/rpi3 子系统下增加组件 - 组件
对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。本次创建名为 HelloWorld 的组件 - gn
Generate ninja 的缩写,用于产生 ninja 文件。 - ninja
ninja 是一个专注于速度的小型构建系统。
3. 源码实现
3.1. 工程目录
相对于~/ohos/openharmony 目录
device
├── rpi3
│ ├── rpi3
│ │ ├── hbis
│ │ │ ├── BUILD.gn
│ │ │ ├── src
│ │ │ │── main.c
│ │ ├── BUILD.gn
3.2. 源代码
- device/rpi3/rpi3/hbis/src/main.c
#include <stdio.h>
int main(int argc, char **argv)
{
printf("\n************************************************\n");
printf("\n\t\tHello HBIS!\n");
printf("\n************************************************\n\n");
return 0;
}
- device/rpi3/rpi3/hbis/BUILD.gn
import("//build/ohos.gni")
group("hello-OHOS") {
deps = [
":helloworld",
]
}
ohos_executable("helloworld") {
sources = [ "src/main.c" ]
output_name = "helloworld"
install_enable = true
part_name = "rpi3_products"
}
- device/rpi3/rpi3/BUILD.gn
import("//build/ohos.gni")
print("rpi3_group in")
group("rpi3_group") {
deps = [
"hbis:hello-OHOS",
]
}
...
}
3.3. 源码见
OpenHarmony 树莓派 3B+ helloworld程序
4. 编译与烧录
4.1. 编译指令
python3 build-rpi3.py build
4.2. 镜像烧录
固件位置生成位置 out/ohos-arm-release/packages/phone/images/firmware.img
使用 Win32DiskImager 进行烧录
4.3. 应用测试
连接 rpi,输入指令:helloworld,即可打印输出