2. 开发环境搭建:从零开始,跑起你的第一个驱动
说实话,环境搭建是很多初学者最头疼的一步。我见过不少同学,代码写得挺好,结果卡在编译环境上,一折腾就是两三天。这一章,我就带你一步步把整个开发环境搭起来。跟着我的节奏走,别跳步,基本不会出问题。
2.1 整体流程概览
先看看我们要做哪些事。我习惯在动手前先理清脉络,这样心里有底。
2.2 获取 OpenHarmony 源码
源码获取是第一步。OpenHarmony 的代码托管在 Gitee 上,国内访问速度还不错。
2.2.1 环境准备
你需要先装好 Git 和 repo 工具。repo 是 Google 出的多仓库管理工具,OpenHarmony 用它来管理上百个 Git 仓库。
# 安装 Git
sudo apt-get install git git-lfs -y
# 配置 Git 用户信息
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
# 安装 repo
mkdir -p ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
2.2.2 下载源码
以 OpenHarmony 4.0 Release 版本为例。我个人建议用这个版本,比较稳定,社区支持也好。
# 创建工作目录
mkdir -p ~/ohos && cd ~/ohos
# 初始化 repo
repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-4.0-Release --no-repo-verify
# 同步代码(这一步比较耗时,看网速)
repo sync -c -j4
2.3 编译环境配置(Ubuntu + Docker)
编译环境是坑最多的地方。OpenHarmony 对编译工具链版本有严格要求,我强烈推荐用 Docker 来隔离环境。为什么?
- 版本一致:团队所有人用同一个镜像,不会出现「我这儿能编你那儿不行」的情况
- 干净隔离:不影响你本机的其他开发环境
- 快速重建:搞坏了?删了容器重新跑一个,一分钟搞定
2.3.1 安装 Docker
# 安装 Docker
sudo apt-get install docker.io -y
# 启动 Docker 服务
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户加入 docker 组(避免每次 sudo)
sudo usermod -aG docker $USER
# 重新登录终端使组生效
# 或者直接执行:newgrp docker
2.3.2 拉取编译镜像
官方提供了编译镜像,直接拉取就行。
# 拉取 OpenHarmony 标准编译镜像
docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:4.0
# 查看镜像是否拉取成功
docker images
2.3.3 启动编译容器
这里有个关键点:要把源码目录挂载到容器里。
# 启动容器,挂载源码目录
docker run -it --name ohos_build \
-v ~/ohos:/home/openharmony \
swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:4.0 \
/bin/bash
2.3.4 执行编译
进到容器里,开始编译。以 rk3568 开发板为例:
# 进入源码目录
cd /home/openharmony
# 安装编译依赖(首次需要)
bash build/prebuilts_download.sh
# 设置编译目标
./build.sh --product-name rk3568 --ccache
# 等待编译完成(第一次编译大概 30-60 分钟)
编译完成后,镜像文件在 out/rk3568/packages/phone/images/ 目录下。
2.4 IDE(DevEco Studio)安装与配置
DevEco Studio 是华为基于 IntelliJ IDEA 定制的 IDE,专门用于 OpenHarmony 开发。说实话,用起来比命令行舒服多了。
2.4.1 下载与安装
- 从华为开发者官网下载 DevEco Studio 最新版(目前是 4.0 以上)
- 解压后运行
./bin/studio.sh启动 - 首次启动会引导安装 SDK,按提示操作即可
2.4.2 配置 SDK
安装完成后,需要配置 SDK 路径。我习惯把 SDK 放在单独目录,方便管理。
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| SDK 路径 | ~/ohos/sdk |
与源码目录分开,避免混淆 |
| API 版本 | 10 或 11 | 对应 OpenHarmony 4.0/4.1 |
| NDK 版本 | 最新稳定版 | 驱动开发需要 NDK 编译工具链 |
2.4.3 导入驱动工程
DevEco Studio 可以直接导入 OpenHarmony 源码中的驱动示例。路径在 drivers/peripheral/ 下,有很多现成的驱动 demo。
2.5 模拟器与真机调试环境准备
调试是驱动开发的重头戏。你想想看,驱动跑在内核态,出问题就是系统崩溃,没有好的调试手段根本没法干活。
2.5.1 模拟器调试
DevEco Studio 自带模拟器,支持 rk3568 等主流开发板。启动方式很简单:
- 在 DevEco Studio 中点击 Tools → Device Manager
- 选择对应的模拟器镜像(需要提前下载)
- 点击启动,等待模拟器开机
模拟器适合做功能验证。比如你写了个 LED 驱动,先在模拟器上看看注册、打开、读写这些流程能不能走通。
2.5.2 真机调试环境
真机调试需要准备以下东西:
- 开发板:推荐 rk3568 或 hi3516dv300,社区支持好
- USB 线:数据线,不要用充电线(我吃过这个亏,插上没反应)
- 串口线:USB 转 TTL,用于查看内核日志
- 网络:开发板和电脑连同一个局域网,用于 NFS 或 ADB 调试
连接步骤:
# 1. 用 USB 线连接开发板和电脑
# 2. 安装串口驱动(CH340/CP2102 等)
# 3. 用串口工具连接(波特率 115200)
sudo minicom -D /dev/ttyUSB0 -b 115200
# 4. 开发板上电,观察串口输出
# 5. 确认系统启动正常后,用 ADB 连接
adb devices
- dmesg:看内核日志,驱动加载信息都在这里
- cat /sys/kernel/debug/:查看驱动调试节点
- logcat:看用户态日志,HDF 框架的日志走这个通道
2.6 环境验证:跑一个 Hello World 驱动
环境搭好了,我们来验证一下。写一个最简单的 HDF 驱动,看看能不能加载成功。
// hello_driver.c
#include "hdf_device_desc.h"
#include "hdf_log.h"
#define HDF_LOG_TAG hello_driver
static int32_t HelloDriverBind(struct HdfDeviceObject *deviceObject)
{
HDF_LOGI("HelloDriver: Bind called");
return HDF_SUCCESS;
}
static int32_t HelloDriverInit(struct HdfDeviceObject *deviceObject)
{
HDF_LOGI("HelloDriver: Init called");
return HDF_SUCCESS;
}
static void HelloDriverRelease(struct HdfDeviceObject *deviceObject)
{
HDF_LOGI("HelloDriver: Release called");
return;
}
struct HdfDriverEntry g_helloDriverEntry = {
.moduleVersion = 1,
.moduleName = "hello_driver",
.Bind = HelloDriverBind,
.Init = HelloDriverInit,
.Release = HelloDriverRelease,
};
HDF_INIT(g_helloDriverEntry);
编译后烧录到开发板,用 dmesg | grep HelloDriver 查看日志。如果看到 "Bind called" 和 "Init called",恭喜你,环境搭建成功了!
好了,环境搭建就到这里。这一套流程我反复验证过多次,按步骤来基本不会出问题。如果遇到报错,先检查版本是否匹配,再看路径是否正确——90% 的问题都出在这两个地方。