1. 环境搭建与Hello World

环境搭建与Hello World 学习卡片

任务说明

本案例目标是在Ubuntu主机上搭建鸿蒙南向(OpenHarmony轻量系统)开发环境,编译一个最小Hello World程序并烧录到Hi3861开发板,通过串口观察输出,验证“编写→编译→烧录→运行”的完整开发流程。

开发环境与依赖

宿主机要求:Ubuntu 20.04 x64,已安装Python 3.8+、Git、wget。Hi3861开发板通过USB转串口连接主机,串口驱动为CH340(Linux内核自带)。

目录结构与源码

在用户目录下创建鸿蒙源码根目录,并下载轻量系统源码(约1.5GB,需网络)。为节省篇幅,此处给出最小可复现的目录骨架与关键文件内容,完整源码通过repo命令获取。

# 安装repo工具
mkdir -p ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo
chmod +x ~/bin/repo
export PATH=~/bin:$PATH

# 创建工作目录并初始化(以OpenHarmony 3.0 LTS为例)
mkdir -p ~/openharmony && cd ~/openharmony
repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-3.0-LTS --no-repo-verify
repo sync -c  # 同步全部源码,约需30-60分钟

编写Hello World程序

在源码的applications/sample/wifi-iot/app目录下新建hello子目录,创建业务代码与编译配置文件:

# 文件:applications/sample/wifi-iot/app/hello/BUILD.gn
import("//build/lite/config/component/lite_component.gni")
lite_component("hello") {
    features = [ "hello:hello_main" ]
}

# 文件:applications/sample/wifi-iot/app/hello/hello.c
#include <stdio.h>
#include "ohos_init.h"

void hello_main(void)
{
    printf("Hello World! OpenHarmony IoT\\n");
}

SYS_RUN(hello_main);  // 系统启动时自动调用

修改同目录下BUILD.gn,将hello组件加入编译列表:

# 文件:applications/sample/wifi-iot/app/BUILD.gn
import("//build/lite/config/component/lite_component.gni")
lite_component("app") {
    features = [ "hello:hello" ]
}

编译与烧录

# 配置编译环境
cd ~/openharmony
hb set  # 选择 wifiiot 产品
hb build -f  # 开始编译,首次约20分钟

# 编译产物路径
# out/wifiiot/Hi3861_wifiiot_app_allinone.bin

烧录使用Hi3861专用工具(HiBurn),在Windows下操作:将上述bin文件通过HiBurn烧录到开发板,波特率921600,烧录地址0x0。

验证方法

烧录完成后,开发板自动重启。使用串口工具(如PuTTY)打开对应COM口,波特率115200,观察启动日志。若在日志末尾看到以下输出,则判定开发流程验证通过:

Hello World! OpenHarmony IoT
Hi3861 Hello World 开发流程验证拓扑 ① 编写源码 hello.c + BUILD.gn printf("Hello World!") ② hb build 编译链接 生成 .bin 固件 ③ HiBurn烧录 串口 921600bps 地址 0x0 Hi3861 开发板 Hi3861 SoC UART TX → 串口助手 (115200) 预期输出: Hello World! OpenHarmony IoT

判定标准

满足以下条件即判定案例通过:

  • 编译过程无错误,成功生成Hi3861_wifiiot_app_allinone.bin文件;
  • 烧录后开发板正常启动,无异常重启循环;
  • 串口工具在115200波特率下收到与源码printf内容完全一致的字符串输出。