2. 开发环境搭建:Ubuntu开发环境配置、交叉编译工具链安装、Hi3861/Hi3516开发板介绍、源码获取与编译
说实话,搭建开发环境这件事,看着琐碎,但往往是整个课程里最容易卡住人的地方。我见过太多同学在群里问「编译报错怎么办」,结果一看,工具链版本不对,或者源码拉了一半就断了。
这一章,咱们就把这些基础工作一次性搞定。你跟着我的步骤走,别跳步,基本不会出问题。
2.1 Ubuntu 开发环境配置
我个人习惯用 Ubuntu 20.04 LTS,64 位版本。为什么选它?因为 OpenHarmony 官方 CI 长期在这个版本上跑,兼容性最好。你如果非要用 22.04 或者 Deepin,也不是不行,但遇到奇怪的问题时,别怪我没提醒你。
装好系统后,先做三件事:
- 换源 —— 把 apt 源换成国内镜像(清华、中科大、阿里都行),不然下载速度会让你怀疑人生。
- 安装基础依赖 —— 下面这个列表是我踩过坑之后整理出来的,缺一个都可能编译失败。
- 配置 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
验证是否安装成功:
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 做驱动移植,会顺手很多。
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,不然中途断了又得重来。
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/ 目录下。
下面这张图帮你理清整个开发环境搭建的流程:
到这里,你的开发环境就搭好了。工具链装好了,源码也拉下来了,编译也跑通了。下一件事,就是把这些固件烧到板子上,看看内核到底是怎么跑起来的。