1. 鸿蒙南向开发环境搭建:从零开始,让代码跑起来

说实话,很多初学者卡在环境搭建这一步。我见过不少人,源码下载了三天三夜,结果编译报错,心态直接崩了。别急,咱们一步步来。

这一章,我带你搞定四件事:拿到 OpenHarmony 源码、装好 DevEco Device Tool、配好编译工具链、最后把固件烧进 Hi3861 开发板。每一步我都会把坑指出来。

核心目标: 完成一次完整的“源码 → 编译 → 烧录 → 验证”闭环。这是后续所有驱动开发的基础。

1.1 整体流程:一张图看懂

先看整体流程。环境搭建不是乱来的,有清晰的依赖关系。我画了张图,你一看就明白。

鸿蒙南向开发环境搭建流程 ① 获取 OpenHarmony 源码 ② 安装 DevEco Device Tool ③ 搭建编译工具链 ④ 烧录与验证 💡 说明: 步骤①和②可以并行进行。建议先下载源码(耗时较长),同时安装工具。

1.2 获取 OpenHarmony 源码

源码获取,我推荐用 repo 工具。为什么?因为 OpenHarmony 项目由几百个 Git 仓库组成,手动 clone 会疯掉。

我的习惯: 在 Ubuntu 20.04 或 22.04 上操作。Windows 用 WSL2 也行,但坑多一点。

1.2.1 安装 repo 工具

# 创建 bin 目录并加入 PATH
mkdir -p ~/bin
export PATH=~/bin:$PATH

# 下载 repo 工具
curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/bin/repo
chmod a+x ~/bin/repo

# 验证安装
repo --version

嗯,这里要注意:国内访问 GitHub 有时很慢。我建议直接用 Gitee 镜像,省心。

1.2.2 下载源码

# 创建工作目录
mkdir -p ~/openharmony
cd ~/openharmony

# 初始化 repo(以 3.2 Release 为例)
repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-3.2-Release --no-repo-verify

# 同步源码(这一步很慢,建议挂代理或夜间跑)
repo sync -c -j4
我曾经踩过的坑: 网络中断导致 repo sync 失败。解决方案:加 --fail-fast 参数,或者写个脚本自动重试。我个人习惯用 while ! repo sync -c -j4; do sleep 5; done 循环拉取。

同步完成后,源码目录大约 8-10 GB。你可以用 du -sh 确认一下。

1.3 安装 DevEco Device Tool

DevEco Device Tool 是华为官方提供的集成开发环境。说白了,它帮你管理源码、编译、烧录,一条龙服务。

1.3.1 下载与安装

去华为开发者官网下载 Linux 版本。我用的版本是 3.1.0。

# 解压安装包
tar -xvf DevEco-Device-Tool-3.1.0-Linux.tar.gz

# 运行安装脚本
cd DevEco-Device-Tool-3.1.0-Linux
./install.sh

安装过程中会检测 Python、Node.js 等依赖。如果缺了什么,它会提示你安装。

1.3.2 配置项目

安装完成后,启动 DevEco Device Tool:

deveco-device-tool

然后导入我们刚才下载的源码:

  1. 点击 "File" → "Open Project"
  2. 选择 ~/openharmony 目录
  3. 等待索引完成(第一次会比较慢)
小技巧: 如果索引太慢,可以在 Settings 里排除 out/ 和 third_party/ 目录。这些目录文件多,但编译时才用到。

1.4 搭建编译工具链

Hi3861 使用的是 RISC-V 内核,所以我们需要交叉编译工具链。OpenHarmony 源码里自带了一套工具链脚本,但需要手动触发下载。

1.4.1 下载工具链

cd ~/openharmony

# 执行工具链下载脚本
bash build/prebuilts_download.sh

这个脚本会下载 gn、ninja、llvm、gcc_riscv32 等工具。下载完成后,它们会被放在 prebuilts/ 目录下。

1.4.2 验证工具链

# 检查 RISC-V GCC
prebuilts/gcc/linux-x86/riscv32/riscv32-unknown-elf/bin/riscv32-unknown-elf-gcc --version

# 检查 GN
prebuilts/build-tools/linux-x86/bin/gn --version

# 检查 Ninja
prebuilts/build-tools/linux-x86/bin/ninja --version

如果都能正常输出版本号,说明工具链没问题。

关键点: Hi3861 是 32 位 RISC-V 芯片,所以必须用 gcc_riscv32 工具链。不要用 64 位的,否则链接会报错。

1.5 Hi3861 开发板烧录与验证

终于到了最激动人心的环节——让代码跑在硬件上。

1.5.1 编译 Hi3861 示例工程

OpenHarmony 为 Hi3861 提供了默认示例。我们先编译它:

cd ~/openharmony

# 设置编译环境
hb set

# 选择 "wifiiot_hispark_pegasus" 或 "hispark_pegasus"
# 按回车确认

# 开始编译
hb build -f

第一次编译会比较慢,大概 5-10 分钟。编译成功后,会在 out/hispark_pegasus/wifiiot_hispark_pegasus/ 目录下生成 Hi3861_wifiiot_app_allinone.bin 文件。

1.5.2 连接开发板

用 USB 线连接 Hi3861 开发板到电脑。在 Linux 下,它会识别为 /dev/ttyUSB0 或 /dev/ttyACM0。

# 查看串口设备
ls -l /dev/ttyUSB*

如果没有显示,检查驱动。Hi3861 使用 CH340 或 CP2102 串口芯片,一般 Linux 内核自带驱动。

1.5.3 烧录固件

在 DevEco Device Tool 中烧录:

  1. 点击左侧 "Project" 面板
  2. 找到 "Hi3861" 配置项
  3. 设置串口号(如 /dev/ttyUSB0)
  4. 点击 "Upload" 按钮

或者用命令行烧录:

# 进入烧录工具目录
cd ~/openharmony/vendor/hisi/hi3861/hi3861/tools

# 执行烧录脚本
python3 hi_flash.py -i /dev/ttyUSB0 -b 921600 -f ../../../../out/hispark_pegasus/wifiiot_hispark_pegasus/Hi3861_wifiiot_app_allinone.bin
注意: 烧录前需要让开发板进入烧录模式。具体操作:按住开发板上的 "BOOT" 键,然后按一下 "RST" 键,最后松开 "BOOT" 键。这时串口会打印 "Chip ID: ...",表示进入烧录模式。

1.5.4 验证运行

烧录完成后,按一下 "RST" 键复位开发板。用串口工具(如 minicom 或 screen)连接:

sudo minicom -D /dev/ttyUSB0 -b 115200

你会看到类似下面的输出:

......
[I] [app] Hello, OpenHarmony!
[I] [app] WiFi IoT SDK version: 1.0.0
[I] [app] Starting...
[I] [app] System init done.

看到 "Hello, OpenHarmony!" 了吗?恭喜,环境搭建成功了!

1.6 常见问题与避坑指南

问题 原因 解决方案
repo sync 卡住不动 网络不稳定或 Git 仓库过大 使用 repo sync -c -j1 单线程拉取,或换用 Gitee 镜像
编译报错 riscv32-unknown-elf-gcc: not found 工具链未下载或路径不对 重新执行 build/prebuilts_download.sh
烧录时提示 No such file or directory 串口设备权限不足 执行 sudo chmod 666 /dev/ttyUSB0 或加入 dialout 用户组
开发板无输出 串口波特率设置错误 确认使用 115200 波特率,8N1 格式
我的经验: 如果烧录失败,先检查串口线。有些 USB 线只能充电,不能传数据。换一根数据线试试,往往能解决问题。