2. OpenHarmony与LiteOS-M概述

说实话,做鸿蒙南向开发,环境搭建往往是新手碰到的第一道坎。我见过不少同事,代码写得挺溜,结果卡在环境配置上好几天。其实说白了,这套环境没那么玄乎,就是几个关键环节串起来。

我个人习惯把环境分成三块:开发主机(你写代码的机器)、交叉编译工具链(把代码变成目标芯片能跑的二进制)、编译构建系统(把整个工程组织起来)。咱们一个一个来拆。

2.1 整体环境架构

先看一张图,把整个环境的关系理清楚。你想想看,代码在Windows上写,编译却在Linux上跑,中间还得把产物烧到开发板上——这中间的数据流是什么样的?

鸿蒙南向开发环境架构 Windows 开发机 VS Code / IDE 代码编辑 & 版本管理 Linux 编译环境 交叉编译工具链 hb / ninja / gn 目标硬件 Hi3861 / STM32 / RISC-V 烧录 & 调试 SSH / Samba 烧录工具 核心思路:Windows 写代码 → Linux 交叉编译 → 烧录到目标板 也可以直接用 Linux 虚拟机或 WSL2 替代物理 Linux 机器 交叉编译工具链 arm-none-eabi-gcc riscv32-unknown-elf-gcc gcc-riscv64-unknown-elf + binutils / newlib 构建系统 hb (鸿蒙构建工具) gn (元构建系统) ninja (执行引擎) Python 3.8+ 烧录调试 HiBurn / DevEco OpenOCD / JLink 串口终端 USB 烧录线

2.2 Linux 环境准备

我建议你直接用 Ubuntu 20.04 LTS 或 22.04 LTS。为什么?因为鸿蒙的构建工具链对这两个版本支持最好。我之前试过 Debian 和 CentOS,结果在依赖包上折腾了好久。

最低要求:

  • CPU:4 核以上(编译 LiteOS-M 还好,但全量编译鸿蒙源码时核数越多越快)
  • 内存:8GB 以上(16GB 更稳)
  • 磁盘:至少 80GB 空闲空间(源码 + 工具链 + 编译产物)
  • 系统:Ubuntu 20.04 / 22.04 x86_64

如果你只有 Windows 机器,别慌。我个人常用的方案是 WSL2 + Ubuntu 22.04,性能损失很小,而且文件共享方便。当然,你也可以用 VMware 或 VirtualBox 装个虚拟机。

2.2.1 安装基础依赖

打开终端,先把基础工具装上。嗯,这里要注意,不同 Ubuntu 版本的包名可能略有差异,但下面这套我在 20.04 和 22.04 上都验证过。

sudo apt update
sudo apt install -y python3 python3-pip python3-venv
sudo apt install -y git curl wget tar unzip
sudo apt install -y build-essential gcc g++ make cmake
sudo apt install -y libncurses5-dev libssl-dev
sudo apt install -y flex bison
sudo apt install -y dosfstools mtools
sudo apt install -y default-jdk

小提示:Python 版本必须 ≥ 3.8。可以用 python3 --version 检查。如果版本太低,建议用 apt install python3.10 升级。

2.3 安装交叉编译工具链

交叉编译工具链,说白了就是一套在 x86 Linux 上运行、但生成 ARM/RISC-V 机器码的编译器。鸿蒙 LiteOS-M 主要支持两类架构:ARM Cortex-M 和 RISC-V。

目标架构 工具链名称 典型芯片 下载来源
ARM Cortex-M3/M4/M7 arm-none-eabi-gcc STM32F4, STM32L4 ARM GNU Toolchain 官网
ARM Cortex-M33 arm-none-eabi-gcc (v10.3+) Hi3861, NXP i.MX RT ARM GNU Toolchain 官网
RISC-V 32位 riscv32-unknown-elf-gcc CH32V307, GD32VF103 SiFive / xPack 发行版
RISC-V 64位 riscv64-unknown-elf-gcc K210, D1 SiFive / xPack 发行版

2.3.1 安装 ARM 工具链(以 Hi3861 为例)

我记得第一次装 ARM 工具链时,直接 apt install 了,结果版本太老,编译鸿蒙内核时报了一堆莫名其妙的错误。后来我学乖了,一定要从 ARM 官方下载指定版本。

# 下载 ARM GCC 10.3-2021.10 版本(鸿蒙官方推荐)
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2

# 解压到 /opt 目录
sudo tar -xjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 -C /opt/

# 添加环境变量
echo 'export PATH=/opt/gcc-arm-none-eabi-10.3-2021.10/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# 验证安装
arm-none-eabi-gcc --version

注意:不要用 apt 默认的 gcc-arm-none-eabi 包!Ubuntu 源里的版本通常较旧(7.x 或 9.x),编译鸿蒙内核时会出现 __aeabi_uldivmod 等符号未定义错误。我曾经在这个坑里浪费了一整天。

2.3.2 安装 RISC-V 工具链

RISC-V 工具链的安装方式类似,但要注意选择 newlib 版本(带标准库),而不是裸机版。

# 下载 riscv32 工具链(xPack 发行版,稳定且更新及时)
wget https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases/download/v10.2.0-1.2/xpack-riscv-none-embed-gcc-10.2.0-1.2-linux-x64.tar.gz

sudo tar -xzf xpack-riscv-none-embed-gcc-10.2.0-1.2-linux-x64.tar.gz -C /opt/

echo 'export PATH=/opt/xpack-riscv-none-embed-gcc-10.2.0-1.2/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# 验证
riscv-none-embed-gcc --version

2.4 配置鸿蒙编译构建环境

鸿蒙的构建系统用的是 hb(HarmonyOS Builder),它底层依赖 gn 和 ninja。hb 是一个 Python 工具,负责解析产品配置、调用 gn 生成 ninja 文件、最后执行编译。

2.4.1 安装 hb 工具

hb 的安装方式在鸿蒙不同版本间有变化。我以 OpenHarmony 3.2 Release 为例,这是目前最稳定的版本。

# 克隆鸿蒙源码(如果还没有)
mkdir -p ~/openharmony
cd ~/openharmony
repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-3.2-Release --no-repo-verify
repo sync -c

# 安装 hb
cd ~/openharmony
python3 -m pip install --user build/lite

# 设置 hb 环境变量
echo 'export PATH=~/.local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# 验证
hb --version

关键点:hb 安装后,必须在鸿蒙源码根目录下执行 hb set 来选择产品。否则编译时会提示找不到产品配置。

2.4.2 配置产品与编译

我个人习惯把编译流程分成三步:选产品 → 配置 → 编译。下面以 Hi3861 开发板为例。

# 第一步:选择产品
cd ~/openharmony
hb set

# 会弹出菜单,用方向键选择 "hi3861v100_liteos_m"
# 或者直接指定:
hb set -root . -p hi3861v100_liteos_m

# 第二步:编译
hb build -f

# -f 表示强制重新生成构建文件
# 首次编译大约需要 5-10 分钟(取决于机器性能)

编译成功后,你会看到类似这样的输出:

...
[1/1] STAMP obj/vendor/hisilicon/hi3861/hi3861/init/init.stamp
ohos demo test success
===== build hi3861v100_liteos_m successful. =====

产物在 out/hi3861v100_liteos_m/ 目录下,主要文件是 Hi3861_wifiiot_app_allinone.bin,这就是要烧录到开发板的固件。

2.5 Windows 端工具配置

虽然编译在 Linux 上做,但日常的代码编辑、版本管理、烧录调试还是在 Windows 上更方便。我推荐以下组合:

工具 用途 备注
VS Code 代码编辑器 安装 C/C++、Python、Remote-SSH 插件
Git for Windows 版本管理 配合 Gitee / GitHub 使用
HiBurn / DevEco Device Tool 固件烧录 Hi3861 专用烧录工具
MobaXterm / PuTTY 串口终端 查看开发板日志输出
WinSCP / Samba 文件传输 Windows ↔ Linux 文件互传

我的习惯:用 VS Code 的 Remote-SSH 插件直接连到 Linux 编译服务器上写代码。这样既享受了 Windows 的 GUI 体验,又不用来回传文件。你试试看,效率提升很明显。

2.6 验证环境是否就绪

环境搭完了,怎么确认一切正常?我一般跑一个快速验证脚本:

#!/bin/bash
# check_env.sh - 环境验证脚本

echo "=== 检查 Python 版本 ==="
python3 --version || echo "✗ Python3 未安装"

echo "=== 检查 hb 工具 ==="
hb --version || echo "✗ hb 未安装"

echo "=== 检查 ARM 工具链 ==="
arm-none-eabi-gcc --version || echo "✗ ARM GCC 未安装"

echo "=== 检查 RISC-V 工具链 ==="
riscv-none-embed-gcc --version || echo "✗ RISC-V GCC 未安装"

echo "=== 检查 gn ==="
gn --version || echo "✗ gn 未安装"

echo "=== 检查 ninja ==="
ninja --version || echo "✗ ninja 未安装"

把上面内容保存为 check_env.sh,然后 bash check_env.sh。如果所有检查项都通过,恭喜你,环境搭建完成!

常见问题:

  • hb set 报错 "No product found":确认你在鸿蒙源码根目录下执行,并且已经 repo sync 完整。
  • 编译时报错 "arm-none-eabi-gcc: not found":检查 PATH 是否包含工具链路径,或者工具链版本是否匹配。
  • Python 模块缺失:用 pip3 install --user -r build/lite/requirements.txt 安装所有依赖。

环境搭建这块,说白了就是一次性的体力活。但别小看它——我见过太多人因为工具链版本不对、Python 路径没配好,卡在编译错误上好几天。按照上面的步骤一步步来,基本不会出问题。接下来,咱们就可以真正开始写驱动代码了。