2. HDF开发环境搭建:从源码获取到工具链就绪

说实话,很多初学者在HDF驱动开发上栽跟头,不是因为代码写不对,而是环境没搭好。我见过太多人花了一周时间折腾编译环境,最后发现是Python版本不对。这一章,我就把我在多个项目里踩过的坑、总结的经验,一次性讲清楚。

2.1 OpenHarmony源码获取

源码获取是第一步。我个人习惯用repo工具来管理,因为OpenHarmony的仓库实在太多了,手动git clone会疯掉。

2.1.1 环境准备

先确认你的Linux系统。我推荐Ubuntu 20.04或22.04 LTS,别用太新的版本,有些依赖包还没适配。

硬件要求:

  • CPU:4核以上,推荐8核
  • 内存:16GB起步,32GB更稳
  • 磁盘:至少200GB空闲空间(源码+编译产物)
  • 网络:能稳定访问gitee.com

2.1.2 安装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

# 验证安装
repo --version

这里有个坑——repo版本必须与OpenHarmony匹配。我曾经用了一个旧版repo去拉新版本代码,结果manifest解析失败,折腾了两天。建议直接用上面的链接。

2.1.3 获取源码

以OpenHarmony 4.0 Release为例:

# 创建工作目录
mkdir -p ~/openharmony
cd ~/openharmony

# 初始化repo
repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-4.0-Release --no-repo-verify

# 同步源码(这一步很慢,建议用镜像)
repo sync -c -j8

加速技巧:如果网络不好,可以用华为云镜像:

repo init -u https://gitee.com/openharmony/manifest.git \
  -b OpenHarmony-4.0-Release \
  --no-repo-verify \
  --repo-url=https://mirrors.huaweicloud.com/git-repo \
  --no-clone-bundle

2.2 编译环境配置

源码拉下来了,接下来配编译环境。嗯,这里要仔细,很多坑都在这一步。

2.2.1 安装依赖包

不同版本的OpenHarmony依赖略有差异,但核心包基本一致:

sudo apt-get update
sudo apt-get install -y \
  binutils binutils-dev \
  build-essential \
  ccache \
  curl \
  file \
  flex \
  g++-multilib \
  gcc-multilib \
  git \
  gnupg \
  gperf \
  lib32ncurses5-dev \
  lib32z1-dev \
  libc6-dev-i386 \
  libgl1-mesa-dev \
  libxml2-utils \
  lz4 \
  m4 \
  make \
  ninja-build \
  nodejs \
  npm \
  openssh-client \
  patch \
  pkg-config \
  python3 \
  python3-pip \
  python3-setuptools \
  rsync \
  scons \
  tzdata \
  unzip \
  vim \
  wget \
  xsltproc \
  zip \
  zlib1g-dev

注意:Python版本必须为3.8~3.11。我遇到过用Python 3.12编译时报语法错误的情况。检查方法:

python3 --version

2.2.2 配置Node.js和npm

编译过程中会用到Node.js做前端资源处理。建议安装Node.js 14.x LTS:

curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version
npm --version

2.2.3 安装hb编译工具

hb是OpenHarmony的编译命令行工具,我个人觉得比直接调gn/ninja方便多了。

# 安装hb
python3 -m pip install --user build/hb

# 设置环境变量
export PATH=~/.local/bin:$PATH

# 验证
hb --version

小技巧:把环境变量加到~/.bashrc里,避免每次开终端都要重新export:

echo 'export PATH=~/.local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

2.3 HDF驱动开发工具链安装

环境配好了,但要做HDF驱动开发,还得装几样关键工具。

2.3.1 交叉编译工具链

HDF驱动最终要跑在目标硬件上,所以交叉编译工具链是必须的。以Hi3861为例:

# 下载工具链
wget https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz

# 解压到指定目录
sudo tar -xzf gcc_riscv32-linux-7.3.0.tar.gz -C /opt/

# 配置环境变量
export PATH=/opt/gcc_riscv32/bin:$PATH

# 验证
riscv32-unknown-elf-gcc --version

不同芯片的交叉工具链不一样,我整理了一个对照表:

芯片平台 工具链前缀 下载来源
Hi3861 (RISC-V) riscv32-unknown-elf- 华为云镜像
Hi3516 (ARM) arm-linux-gnueabi- 华为云镜像
RK3568 (ARM64) aarch64-linux-gnu- Linaro官方
STM32MP1 (ARM) arm-none-linux-gnueabihf- ARM官方

2.3.2 HDF驱动框架源码结构

源码拉下来后,HDF框架在以下目录:

drivers/
├── framework/          # HDF框架核心
│   ├── core/           # 核心层
│   ├── model/          # 设备模型
│   ├── support/        # 支持库
│   └── tools/          # 工具
├── adapter/            # 适配层
├── peripheral/         # 外设驱动
└── interface/          # 驱动接口定义

我个人建议先熟悉drivers/framework/core目录,这是HDF的骨架。你想想看,驱动对象管理、消息机制、配置解析都在这里。

2.3.3 编译HDF驱动示例

环境都齐了,我们来编译一个最简单的HDF驱动验证一下:

# 进入源码根目录
cd ~/openharmony

# 选择产品(以hi3861为例)
hb set -p hi3861

# 编译
hb build -f

第一次编译会比较慢,因为要编译整个系统。之后可以用增量编译:

# 只编译驱动模块
hb build -T drivers

验证成功标志:编译完成后,在out/hi3861/目录下会生成OHOS_Image.bin和OHOS_Image.map。如果看到这两个文件,说明环境搭建成功了。

2.4 环境验证与常见问题

搭建过程中难免遇到问题。我把自己踩过的坑列出来,你遇到了可以直接对照:

问题现象 原因 解决方案
repo sync报错"fatal: unable to access" 网络不通或DNS解析失败 切换镜像源或配置代理
hb build报"python3 not found" Python未安装或版本不对 检查python3 --version,安装3.8~3.11
编译时报"ccache: command not found" ccache未安装 sudo apt-get install ccache
链接时报"undefined reference to HdfDeviceRegister" HDF框架未正确链接 检查BUILD.gn中deps是否包含hdf_core

重要提醒:如果你用的是Windows + WSL2,注意文件系统性能问题。把源码放在WSL2的Linux文件系统里(如~/openharmony),不要放在/mnt/c/下,否则编译速度会慢3~5倍。我当初不知道这个,白白浪费了两天时间。

2.5 本章知识体系

为了让你对整个环境搭建流程有个全局认识,我画了一张流程图:

HDF开发环境搭建流程 1. 源码获取 安装repo工具 repo init初始化 repo sync同步 2. 编译环境配置 安装系统依赖包 配置Python/Node.js 安装hb编译工具 3. 工具链安装 交叉编译工具链 HDF框架源码 编译验证 环境就绪,可以开始HDF驱动开发

这张图把整个流程分成了三层:源码获取、编译环境、工具链。每一层都有对应的操作步骤。我建议你按这个顺序来,不要跳步。曾经有个学员跳过了环境依赖安装,直接编译,结果报了一堆错,排查了三天才发现是缺了libxml2。

我的习惯:每完成一步,就在终端里做个标记。比如源码同步完,我就创建一个.step1_done文件。这样万一中间断了,回来也知道做到哪了。