2. 开发环境搭建:源码获取、编译环境配置、烧录工具使用
说实话,很多做嵌入式开发的朋友,拿到一块新板子,第一反应就是赶紧写代码。但我见过太多人卡在环境搭建这一步,一卡就是好几天。我个人习惯是,先把环境捋顺了,后面才能跑得快。
OpenHarmony 的适配工作,说白了就是三件事:拿到源码、配好编译环境、把固件烧进去。这三步走稳了,后面驱动开发才有基础。咱们一个一个来。
2.1 源码获取:从仓库到本地
OpenHarmony 的源码托管在 Gitee 上。你想想看,这么大的一个操作系统,代码量是百万级甚至千万级的。怎么拿?我建议用 repo 工具,它是专门管理多仓库项目的。
核心思路:repo 工具 + manifest 清单文件,一次性拉取所有相关仓库。
2.1.1 安装 repo 工具
先装 Git,这个不用多说。然后下载 repo 脚本:
# 创建 bin 目录并加入 PATH
mkdir -p ~/bin
export PATH=~/bin:$PATH
# 下载 repo 工具
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/bin/repo
chmod a+x ~/bin/repo
嗯,这里要注意:curl 命令如果网络不好,可能会超时。我曾经在某个客户现场,网络环境特别差,折腾了半小时才把 repo 拉下来。建议提前准备好离线包,或者用国内镜像。
2.1.2 初始化并同步代码
选一个你喜欢的版本。OpenHarmony 有多个分支,比如 master、OpenHarmony-3.2-Release 等。我个人习惯用 -b 参数指定稳定版:
# 创建工作目录
mkdir ohos_workspace
cd ohos_workspace
# 初始化 manifest
repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-3.2-Release --no-repo-verify
# 同步代码(这一步最耗时)
repo sync -c -j4
-j4 表示用 4 个线程并行下载。如果你的机器性能好,可以改成 -j8 甚至 -j16。但别贪心,网络带宽才是瓶颈。
小技巧:如果同步过程中断了,重新执行 repo sync 就行,它会断点续传。我第一次同步时断了三次,差点崩溃,后来发现这是正常现象。
2.2 编译环境配置:把工具链装好
源码拿到了,接下来要能编译。OpenHarmony 的编译环境,说白了就是一套交叉编译工具链加上一些依赖库。我建议用 Ubuntu 20.04 或 22.04,这是官方推荐的环境。
2.2.1 安装基础依赖
先更新包管理器,然后装一堆工具:
sudo apt update
sudo apt install -y python3 python3-pip python3-setuptools \
binutils build-essential bison flex \
libncurses5-dev libssl-dev ccache \
git curl wget unzip zip
这些包是干什么的?简单说:python3 是编译脚本的运行时,build-essential 是基础编译工具,libncurses5-dev 是菜单配置界面需要的。嗯,不用全记住,但装漏了会报错。
2.2.2 安装交叉编译工具链
OpenHarmony 支持多种芯片架构。我这里以 ARM64 为例,这是目前最常用的:
# 下载 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz
# 解压到 /opt
sudo tar -xf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt/
# 配置环境变量
export PATH=/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH
验证一下:
aarch64-none-linux-gnu-gcc --version
如果输出版本号,说明工具链装好了。我记得有一次,同事装完没加环境变量,编译时报错说找不到编译器,查了半天才发现是 PATH 没配好。
避坑指南:我曾经在 Ubuntu 18.04 上编译 OpenHarmony 3.2,结果 Python 版本太低(3.6),导致编译脚本报语法错误。建议用 Python 3.8 以上版本。
2.2.3 配置编译环境(hb 工具)
OpenHarmony 的编译入口是 hb 工具。它其实是一个 Python 脚本,负责解析产品配置、调用 Ninja 构建系统。
# 安装 hb
cd ohos_workspace
python3 -m pip install --user build/lite
# 设置环境变量
export PATH=~/.local/bin:$PATH
# 验证
hb --version
如果看到版本号,恭喜你,环境基本就绪了。
2.3 编译流程:从源码到固件
环境配好了,我们来编译一个具体的开发板。以 RK3568 为例,这是 OpenHarmony 官方支持的板子之一。
2.3.1 选择产品
hb set
执行后会弹出一个菜单,让你选择产品。用方向键选择 rk3568,然后回车。这一步其实是在设置 ohos_config.json 中的产品名称。
2.3.2 开始编译
hb build -f
-f 参数表示全量编译。第一次编译时间会比较长,大概 30 分钟到 1 小时,取决于你的机器性能。我建议第一次用全量编译,后面增量编译就快多了。
编译完成后,固件输出在 out/rk3568/packages/phone/images/ 目录下。你会看到一堆文件:
| 文件名 | 说明 |
|---|---|
boot_linux.img |
内核镜像 |
system.img |
系统分区 |
vendor.img |
厂商分区(驱动、配置) |
userdata.img |
用户数据分区 |
parameter.txt |
分区表 |
重点:驱动开发主要关注 vendor.img,因为你的驱动模块最终会编译进这个分区。
2.4 烧录工具使用:把固件写进板子
固件编译好了,怎么跑起来?烧录。不同芯片厂商的烧录工具不一样。RK3568 用的是 RKDevTool(瑞芯微官方工具)。
2.4.1 安装烧录工具
从瑞芯微官网下载 RKDevTool,或者用 OpenHarmony 社区提供的版本。解压后直接运行:
# 给执行权限
chmod +x RKDevTool
# 运行
./RKDevTool
嗯,这里要注意:烧录工具需要 root 权限来访问 USB 设备。如果提示权限不足,用 sudo 运行。
2.4.2 进入烧录模式
把开发板通过 USB 连接到电脑。按住板子上的 RECOVERY 键(或 MASKROM 键),然后上电或按 RESET 键。RKDevTool 会检测到设备,显示 发现一个LOADER设备。
小技巧:如果一直检测不到设备,检查 USB 线是不是数据线(有些线只能充电)。我曾经被一根劣质 USB 线坑了整整一下午。
2.4.3 配置分区并烧录
在 RKDevTool 中,点击 升级固件 选项卡,选择你编译好的 update.img(或者逐个选择分区镜像)。然后点击 升级。
烧录过程大概 2-5 分钟。完成后板子会自动重启,进入 OpenHarmony 系统。
2.5 知识体系总览
为了让你对整个流程有个全局认识,我画了一张图:
2.6 常见问题与避坑
环境搭建这块,我踩过的坑比走过的路还多。挑几个典型的说说:
- repo sync 卡住不动:网络问题。试试用
repo sync --no-tags跳过标签下载,或者换时间段再试。 - 编译报错 "Python version too old":检查 Python 版本,OpenHarmony 3.2 要求 Python 3.8+。
- 烧录时设备识别不到:先确认 USB 线是数据线,再检查驱动是否安装。Windows 下需要装 RockUSB 驱动。
- 烧录后板子起不来:大概率是分区表不匹配。检查
parameter.txt是否与板子硬件一致。
重要提醒:千万不要在编译过程中强制中断(比如直接关终端)。Ninja 的增量编译依赖中间文件,强制中断可能导致下次编译失败。我吃过这个亏,最后只能删掉 out 目录重新全量编译。
好了,环境搭建这部分就到这里。工具链配好了,下一步就是真正的驱动开发了。记住一句话:环境搭得好,开发没烦恼。