学习目标
- 了解开发中的目录结构
- 掌握代码的编译和烧录
-
学习内容
项目结构
需要掌握目录
device
设备目录。此目录内部为开发板板和芯片目录:
├── board│ └── itcast│ └── genkipi└── soc└── hisilicon├── LICENSE├── OAT.xml├── README.en.md├── README.md├── hi3861v100└── ohos.build
board中为开发板。
- board目录下的子目录表示公司。itcast表示江苏传智播客教育科技股份有限公司 。
- genkipi表示传智公司的开发板
- soc中为芯片。
└── itcast └── genkipi ├── BUILD.gn ├── config.json ├── hals └── ohos.build
- vendor目录下的子目录表示公司。itcast表示江苏传智播客教育科技股份有限公司 。- genkipi表示传智公司下的开发板。- config.json:表示开发板的配置信息,需要用到什么芯片,采用系统组件有哪些。<a name="uv7nF"></a>##### out编译输出目录。目录中会编译生成安装文件:- `Hi3861_wifiiot_app_allinone.bin`为我们的安装文件<a name="repaf"></a>#### 需要了解的目录<a name="MapAW"></a>##### base基础通用组件库。其中`iothardware`为硬件通用驱动库。<a name="INlwm"></a>##### build编译工具链。整个操作系统的打包,依赖于这个工具链。其中对于轻量级系统的编译,依赖的是`lite`目录下的工具。<a name="Qo9pa"></a>##### foundation子系统服务。提供子系统服务功能。例如communication_wifi提供wifi能力的子系统。<a name="tBdBa"></a>##### kernel内核服务。<a name="vjvuv"></a>##### third_party第三方开源库。<a name="e1lzW"></a>##### test兼容性测试库。<a name="xPUAm"></a>#### 应用开发目录早期开发系统应用,我们在`application`目录,通过实践和基金会沟通发展,现在有了一个比较合理的操作方式。<br />我们系统应用开发的代码,放到具体的开发板目录中。例如我们的genkipi开发板目录在`device/board/itcast/genkipi`。我们的应用开发放到这个目录的`app`目录下。<br />为什么需要这样设计? <br />一个芯片可以制作出很多不同类型的开发板,每种类型的开发板功能不同,导致不同开发板对应的系统应用不同,如果采用之前的`application`目录,从理解上就是所有开发板都是这一套应用,这样是不合理的。<a name="ENtso"></a>### Hello World我们编写代码的**根目录**为`device/board/itcast/genkipi/app`.<br />项目创建流程如下:1. **根目录**下新建`hello_world`文件夹2. 在`hello_world` 下新建 `main.c` 文件3. 在`hello_world`下新建 `BUILD.gn`文件4. 修改根目录下的`BUILD.gn`文件<a name="Shlag"></a>#### 代码部分```c#include "ohos_init.h"#include "ohos_types.h"static void start(void) {printf("hello world!!!\n");}APP_FEATURE_INIT(start);
static_library("hello_world") {sources = ["main.c"]}
import("//build/lite/config/component/lite_component.gni")lite_component("app") {features = ["hello_world:hello_word"]}
程序入口
我们采用APP_FEATURE_INIT作为程序入口,参数为要去执行的程序名称。例如:
static void start(void) {printf("hello world!!!\n");}APP_FEATURE_INIT(start);
就是把start函数作为程序入口。
需要注意的是需要额外的引入一些头:
#include "ohos_init.h"#include "ohos_types.h"
-
编译配置
OpenHarmony的构建系统采用的是GN。
GN全称为Generate Ninja。是Google开发的一种构建配置文件,用于构建和管理项目代码的构建系统。许多大型项目中采用了这个构建系统: Chromium
- Fuchsia
- Flutter
- WebRTC
BUILD.gn文件通常位于项目根目录或子目录中,用于描述项目的构建规则。它定义了编译目标、依赖项、编译选项、编译器设置等。通过编辑BUILD.gn文件,开发人员可以控制代码的编译和构建过程,包括选择要编译的文件、指定编译器和链接器选项,以及定义自定义构建规则。
我们的根目录下的BUILD.gn负责引导加载我们编写的应用。我们编写的应用中的BUILD.gn主要用来配置编译的源文件已经依赖。
程序烧录运行
通过Hiburn.exe的GUI进行烧录




通过Hiburn.exe的命令行进行烧录
- 将
out\genkipi\genkipi\目录下的Hi3861_wifiiot_app_allinone.bin,拷贝到Hiburn.exe同级目录下 打开命令行,执行以下操作:
HiBurn.exe -com:3 -signalbaud:921600 -bin:Hi3861_wifiiot_app_allinone.bin
将burn_cmd目录拷贝到和项目目录同级目录。例如项目目录为Ohos_compiler,则结构如下:
├── Ohos_compiler└── burn_cmd
如果要编译Ohos_compiler这个项目,在burn_cmd中打开windows的命令行,执行如下命令:
burn.bat Ohos_compiler 3
- Ohos_compiler为项目名称,根据实际情况进行配置。
- 3表示串口,根据实际情况进行配置。
- 脚本执行过程如图:

此时需要按下开发板的重置按钮。按下后就正式开始烧录,如下:

作业
- 编写hello world程序
