1. 课程导学与环境搭建:鸿蒙南向开发全景
大家好,我是你们这门课的老朋友。做嵌入式这行快十五年了,从早期的单片机裸机开发,到后来跑 RTOS,再到这几年深度参与鸿蒙南向适配,踩过的坑确实不少。今天咱们开篇第一讲,先把整个鸿蒙南向开发的版图理清楚,再把吃饭的家伙——开发环境搭好。
说白了,鸿蒙南向开发就是让芯片和板子“开口说话”。你写的驱动代码,要能控制 GPIO 口高低电平,要能让 I2C 总线上的传感器把数据吐出来,还要保证整个系统在资源受限的 MCU 上跑得稳。这活儿看着琐碎,但它是整个物联网设备的根基。
核心认知: 鸿蒙南向 ≠ 单纯写驱动。它是从芯片寄存器配置 → LiteOS-M 内核调度 → 硬件抽象层(HAL)封装 → 系统服务注册的完整链路。你写的每一行代码,最终都要经过这四层才能让应用层调起来。
1.1 鸿蒙南向开发全景图
先看一张整体架构图,我习惯把鸿蒙南向系统分成四层。你想想看,一个智能灯控设备从你按下手机 App 到 LED 灯亮起,数据是怎么流的?
这张图我建议你存下来。每次写驱动遇到问题时,就想想数据现在卡在哪一层。我在项目里见过太多人,应用层调接口没反应,就一头扎进寄存器里翻,结果发现是 HDF 服务没注册——这就是对层次不熟。
1.2 LiteOS-M 内核特性速览
LiteOS-M 是鸿蒙针对 MCU 类设备(内存通常 256KB 以下)设计的轻量内核。它跟 Linux 那种“大而全”的思路完全不同。我刚开始接触时也觉得别扭,但用顺手了会发现——它真的很适合物联网场景。
| 特性 | LiteOS-M | FreeRTOS | RT-Thread Nano |
|---|---|---|---|
| 最小 RAM 需求 | ~4KB | ~6KB | ~3KB |
| 任务调度 | 抢占式 + 时间片轮转 | 抢占式 | 抢占式 + 时间片 |
| IPC 机制 | 队列、信号量、互斥锁、事件 | 队列、信号量、互斥锁 | 邮箱、信号量、互斥锁 |
| 动态内存管理 | 最佳适配 + 伙伴算法 | 简单堆分配 | 固定大小内存池 |
| 中断延迟 | < 1μs (典型值) | < 2μs | < 1.5μs |
我的经验: LiteOS-M 的事件机制(Event)在驱动开发中特别好用。比如你要等 GPIO 中断 + 定时器超时两个条件,用事件可以一次等两个标志位,比信号量灵活得多。我在做智能门锁项目时,就用事件机制把按键消抖和超时重试的逻辑写得很干净。
1.3 开发板选型:Hi3861 vs Hi3516
很多初学者会纠结选哪块板子。我的建议很直接:
- Hi3861 —— 如果你主要做 传感器采集、智能家居终端、低功耗设备。它基于 RISC-V 架构,主频 160MHz,自带 WiFi,适合做物联网节点。
- Hi3516 —— 如果你要做 摄像头、音视频处理、带屏幕的交互设备。它是 ARM Cortex-A7,主频 900MHz,带 ISP 和硬件编解码,适合做边缘计算网关。
我个人习惯是:课程前期用 Hi3861 打基础,因为它的外设(GPIO、I2C、SPI、UART)更典型,寄存器操作也更直观。等大家把驱动框架跑熟了,再切到 Hi3516 上做复杂场景。
注意: Hi3861 的 Flash 只有 2MB,RAM 352KB。编译时别开太多调试选项,否则链接会报“空间不足”。我曾经有一次开了全量日志,编译出来固件 1.8MB,差点塞不下。
1.4 OpenHarmony 源码获取
源码获取现在比以前方便多了。我最早做适配时还得从 gitee 上一个个 repo 去拉,现在官方提供了 repo 工具一键同步。
# 1. 安装 repo 工具(Ubuntu 环境)
curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3/repo \
> /usr/local/bin/repo
chmod a+x /usr/local/bin/repo
# 2. 创建工作目录
mkdir -p ~/openharmony && cd ~/openharmony
# 3. 初始化仓库(以 3.2 Release 为例)
repo init -u https://gitee.com/openharmony/manifest.git \
-b OpenHarmony-3.2-Release --no-repo-verify
# 4. 同步源码(这一步比较久,建议挂代理或夜间跑)
repo sync -c -j4
避坑指南: 我曾经在 Windows 上用 WSL 拉源码,结果因为文件路径大小写问题,编译时一堆头文件找不到。后来我老老实实装了双系统——Ubuntu 22.04 做编译,Windows 做文档和串口调试。这个组合目前最稳。
1.5 编译环境搭建(Ubuntu + Windows 双系统)
环境搭建我分成三步走,每一步都有坑,我帮你提前踩平。
Step 1:Ubuntu 基础环境
# 安装必要工具链
sudo apt update
sudo apt install -y python3 python3-pip python3-setuptools \
gcc-arm-none-eabi binutils-arm-none-eabi \
git curl wget vim make cmake ninja-build
# 安装 hb 编译工具(鸿蒙专属)
pip3 install --user ohos-build
# 验证安装
hb --version # 正常应显示 0.4.6 或更高
Step 2:Windows 端工具
- 串口工具: MobaXterm(推荐)或 Putty。波特率通常 115200,数据位 8,停止位 1,无校验。
- 烧录工具: HiBurn(海思官方)或 DevEco Device Tool(华为官方 IDE 插件)。
- 代码阅读: VS Code + Remote-SSH 插件,直接连到 Ubuntu 虚拟机看代码。
Step 3:首次编译验证
# 进入源码根目录
cd ~/openharmony
# 设置编译目标(以 Hi3861 为例)
hb set -p hi3861v100_liteos_m
# 开始编译
hb build -f
# 编译成功后,固件在:
# out/hi3861v100_liteos_m/wifiiot_hispark_pegasus/
# 你会看到 Hi3861_wifiiot_app_allinone.bin
第一次编译大概需要 15-30 分钟。 如果报错,90% 是 Python 包版本冲突。我建议用 Python 3.9 或 3.10,别用 3.11+,有些依赖还没适配。
1.6 本章小结:你该带走什么?
这一章内容不少,但核心就三件事:
- 理解四层架构——以后写驱动时,时刻问自己“我现在在操作哪一层?”
- 选对板子——Hi3861 练手,Hi3516 进阶,别一上来就啃硬骨头。
- 搭好环境——Ubuntu 编译 + Windows 调试,这是目前最舒服的组合。