学习目标
- 了解开发中的目录结构
- 掌握代码的编译和烧录
-
学习内容
项目结构
需要掌握目录
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程序