2. 开发环境搭建:Ubuntu开发环境配置、交叉编译工具链安装、Hi3861/Hi3516开发板介绍、源码获取与编译

说实话,搭建开发环境这件事,看着琐碎,但往往是整个课程里最容易卡住人的地方。我见过太多同学在群里问「编译报错怎么办」,结果一看,工具链版本不对,或者源码拉了一半就断了。

这一章,咱们就把这些基础工作一次性搞定。你跟着我的步骤走,别跳步,基本不会出问题。

2.1 Ubuntu 开发环境配置

我个人习惯用 Ubuntu 20.04 LTS,64 位版本。为什么选它?因为 OpenHarmony 官方 CI 长期在这个版本上跑,兼容性最好。你如果非要用 22.04 或者 Deepin,也不是不行,但遇到奇怪的问题时,别怪我没提醒你。

我的建议: 如果你手头没有 Linux 机器,直接在 Windows 上装个 VMware 或 VirtualBox,分配 4 核 CPU + 8GB 内存 + 80GB 磁盘,够用。

装好系统后,先做三件事:

  1. 换源 —— 把 apt 源换成国内镜像(清华、中科大、阿里都行),不然下载速度会让你怀疑人生。
  2. 安装基础依赖 —— 下面这个列表是我踩过坑之后整理出来的,缺一个都可能编译失败。
  3. 配置 Python 环境 —— OpenHarmony 的构建系统依赖 Python 3.8+,别用 Python 2。

直接贴命令:

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-pip python3-venv \
    git curl wget tar unzip zip \
    build-essential gcc g++ make cmake \
    libssl-dev libffi-dev libncurses5-dev \
    flex bison bc u-boot-tools \
    dosfstools mtools mtd-utils \
    device-tree-compiler

嗯,这里要注意:device-tree-compiler 很多人会漏掉,但编译内核设备树时缺了它就会报错。我曾经因为这个卡了半小时,最后发现是少装了一个包。

2.2 交叉编译工具链安装

交叉编译,说白了就是在你的 x86 电脑上编译出能在 ARM 或 RISC-V 芯片上跑的程序。你想想看,Hi3861 是 RISC-V 内核,Hi3516 是 ARM Cortex-A7,它们的指令集跟你的电脑不一样,所以必须用专门的工具链。

OpenHarmony 官方推荐了两套工具链:

目标芯片 工具链名称 架构 下载方式
Hi3861 gcc_riscv32 RISC-V 32位 从 OpenHarmony 仓库下载预编译包
Hi3516 gcc-arm-none-eabi ARM Cortex-A7 从 ARM 官方或仓库下载

安装步骤其实很简单,别被「交叉编译」四个字吓到:

# 创建工具链目录
mkdir -p ~/ohos_toolchain
cd ~/ohos_toolchain

# 下载 Hi3861 工具链(RISC-V)
wget https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz
tar -xzf gcc_riscv32-linux-7.3.0.tar.gz

# 下载 Hi3516 工具链(ARM)
wget https://repo.huaweicloud.com/harmonyos/compiler/gcc-arm-none-eabi/9-2019-q4-major/linux/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
tar -xjf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2

# 配置环境变量(建议写入 ~/.bashrc)
export PATH=$PATH:~/ohos_toolchain/gcc_riscv32/bin
export PATH=$PATH:~/ohos_toolchain/gcc-arm-none-eabi/bin
注意: 工具链版本一定要跟 OpenHarmony 源码匹配。我曾经手贱用了更新的 gcc 13,结果编译内核时一堆语法错误,最后老老实实换回官方推荐的版本。

验证是否安装成功:

riscv32-unknown-elf-gcc --version
arm-none-eabi-gcc --version

如果能看到版本号,说明工具链已经就绪。

2.3 Hi3861 / Hi3516 开发板介绍

这两块板子是 OpenHarmony 轻量系统和小型系统的代表。我简单说说它们的区别,方便你选型。

Hi3861 —— 轻量系统代表

  • CPU: RISC-V 32 位,160MHz
  • 内存: 352KB RAM + 2MB Flash
  • 特点: 超低功耗,适合传感器、智能家居终端
  • 网络: 内置 Wi-Fi,无以太网
  • 典型场景: 温湿度采集、智能灯控、IoT 节点

Hi3516 —— 小型系统代表

  • CPU: ARM Cortex-A7,双核 1.2GHz
  • 内存: 256MB DDR3 + 256MB Flash
  • 特点: 带硬件编解码,支持摄像头
  • 网络: 百兆以太网 + Wi-Fi
  • 典型场景: 网络摄像头、智能门锁、边缘计算节点

你如果刚开始学,我建议从 Hi3861 入手。为什么?因为它简单,没有复杂的显示和网络协议栈,你能更快地看到内核启动日志,建立信心。等你把 Hi3861 玩熟了,再切到 Hi3516 做驱动移植,会顺手很多。

一句话总结: Hi3861 适合入门练手,Hi3516 适合深入做产品级开发。

2.4 源码获取与编译

源码获取,我推荐用 repo 工具。OpenHarmony 的仓库有上百个 git 子仓库,手动一个一个 clone 会疯掉。

安装 repo 工具

curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
chmod a+x /usr/local/bin/repo

下载源码

mkdir ~/openharmony && cd ~/openharmony
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c -j4

-j4 表示用 4 个线程并行下载。你如果网络好,可以改成 -j8 甚至 -j16。但注意,第一次同步大概要下载 5~8GB 的数据,建议用有线网络,别用 Wi-Fi,不然中途断了又得重来。

避坑指南: 我曾经在下载到 90% 时网络闪断,结果 repo sync 报错。别慌,重新执行 repo sync -c -j4 就行,它会断点续传。

编译 Hi3861

cd ~/openharmony
hb set
# 选择 "wifiiot_hispark_pegasus"
hb build -f

第一次编译大概需要 10~15 分钟。编译成功后,你会看到类似这样的输出:

...
[1/1] STAMP obj/build/lite/ohos.stamp
===== build successful =====

生成的固件在 out/hispark_pegasus/wifiiot_hispark_pegasus/ 目录下,文件名是 Hi3861_wifiiot_app_allinone.bin。

编译 Hi3516

cd ~/openharmony
hb set
# 选择 "ipcamera_hispark_taurus"
hb build -f

Hi3516 的编译时间会长一些,大概 20~30 分钟。生成的镜像在 out/hispark_taurus/ipcamera_hispark_taurus/ 目录下。

下面这张图帮你理清整个开发环境搭建的流程:

开发环境搭建流程 Ubuntu 20.04 LTS 安装基础依赖包 交叉编译工具链 repo 获取源码 hb build Hi3861 hb build Hi3516 out/ 目录下生成 .bin 固件 说明:先配 Ubuntu 环境,再装工具链和拉源码,最后分别编译两块开发板的固件

到这里,你的开发环境就搭好了。工具链装好了,源码也拉下来了,编译也跑通了。下一件事,就是把这些固件烧到板子上,看看内核到底是怎么跑起来的。