2. 开发环境搭建:Linux+Windows混合开发环境、交叉编译工具链与编译构建配置
说实话,做鸿蒙南向开发,环境搭建往往是新手碰到的第一道坎。我见过不少同事,代码写得挺溜,结果卡在环境配置上好几天。其实说白了,这套环境没那么玄乎,就是几个关键环节串起来。
我个人习惯把环境分成三块:开发主机(你写代码的机器)、交叉编译工具链(把代码变成目标芯片能跑的二进制)、编译构建系统(把整个工程组织起来)。咱们一个一个来拆。
2.1 整体环境架构
先看一张图,把整个环境的关系理清楚。你想想看,代码在Windows上写,编译却在Linux上跑,中间还得把产物烧到开发板上——这中间的数据流是什么样的?
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 路径没配好,卡在编译错误上好几天。按照上面的步骤一步步来,基本不会出问题。接下来,咱们就可以真正开始写驱动代码了。