1. 课程导论与开发环境搭建
各位同学,欢迎来到《鸿蒙南向设备与硬件适配》实战课。我是你们的老朋友,一个在嵌入式底层摸爬滚打了十几年的工程师。今天咱们先不急着敲代码,先把地图摊开,看看鸿蒙南向生态到底长什么样,再把咱们的“武器”——开发环境给搭起来。
说实话,鸿蒙南向这几年变化挺快的。我从 LiteOS 1.0 时代就开始接触,看着它一步步演进到现在的 LiteOS-M。很多初学者一上来就盯着源码看,结果被各种宏定义和调度算法绕晕了。我的建议是:先看全景,再钻细节。就像你去一个陌生城市,总得先看看地图,知道哪是主干道,哪是小巷子,对吧?
鸿蒙南向生态全景
鸿蒙南向,说白了就是设备端的那一套。从芯片到硬件驱动,再到内核和系统服务,最后支撑起上层应用。我习惯把它分成四个层次:
| 层次 | 核心内容 | 你主要打交道的东西 |
|---|---|---|
| 芯片层 | MCU/SoC 选型、启动流程、外设寄存器 | Hi3861、STM32、RISC-V 等 |
| 内核层 | LiteOS-M 调度、内存管理、IPC | 任务、信号量、消息队列 |
| 驱动层 | HDF(硬件驱动框架)、外设驱动 | GPIO、I2C、SPI、UART 驱动模型 |
| 系统服务层 | 文件系统、网络协议栈、OTA | LiteFS、LwIP、HiLink |
嗯,这里要注意:咱们这门课主要聚焦在内核层和驱动层。芯片层作为基础,系统服务层作为延伸。你想想看,如果驱动写不好,上层服务跑得再欢也是白搭。我在项目中遇到过好几次,应用层工程师查了两天的 bug,最后发现是 SPI 驱动里一个时钟极性配置错了。所以,底子一定要打牢。
LiteOS-M 内核架构概览
LiteOS-M 是华为针对 IoT 场景设计的轻量级实时内核。它有多轻?我记得在 Hi3861 上,最小内核镜像可以做到几十 KB。但麻雀虽小,五脏俱全。
它的核心模块包括:
- 任务管理:支持抢占式调度,优先级从 0 到 31,0 最高。我习惯把实时性要求高的任务放在高优先级,比如传感器数据采集。
- 内存管理:提供静态内存池和动态内存分配。在资源受限的设备上,我建议尽量用静态分配,避免内存碎片。
- 同步与通信:信号量、互斥锁、事件、消息队列。这是多任务协作的基石。
- 软定时器:基于系统 Tick 的定时机制,适合周期性任务。
下面这张图可以帮你快速建立 LiteOS-M 的整体印象:
LOS_TaskDelay 和 LOS_SemCreate 写个小 demo,感受一下多任务是怎么“同时”跑的。有了体感,再看源码会轻松很多。
开发板选型:Hi3861 vs STM32
咱们这门课主要用两块板子:Hi3861 和 STM32F4 系列。为什么选它们?
| 对比项 | Hi3861 | STM32F407 |
|---|---|---|
| 内核 | RISC-V 32bit @ 160MHz | Cortex-M4F @ 168MHz |
| RAM | 352KB | 192KB |
| Flash | 2MB | 1MB |
| Wi-Fi | 内置 2.4G | 需外接模块 |
| 典型场景 | 智能家居、IoT 节点 | 工业控制、电机驱动 |
| 鸿蒙适配度 | 原生支持,开箱即用 | 社区移植,需手动适配 |
我个人习惯是:学内核机制用 Hi3861,因为它是鸿蒙的“亲儿子”,编译烧录一条龙,省心。学驱动移植用 STM32,因为它的外设更丰富,而且市面上大部分 MCU 都是 Cortex-M 架构,学会了 STM32 的适配方法,其他芯片也能举一反三。
VS Code + DevEco Device Tool 环境搭建
工欲善其事,必先利其器。咱们的开发环境是 VS Code + DevEco Device Tool 插件。这套组合是目前鸿蒙南向开发的主流选择。
搭建步骤其实不复杂,我帮你梳理一下:
- 安装 VS Code:去官网下载最新版,一路 Next 就行。
- 安装 Python 3.8+:DevEco 依赖 Python,记得勾选“Add Python to PATH”。
- 安装 Node.js 14+:编译工具链需要。
- 安装 DevEco Device Tool 插件:在 VS Code 扩展商店搜索“DevEco Device Tool”,安装即可。
- 配置工具链:打开插件,按照引导下载交叉编译工具链(gcc-arm-none-eabi 或 RISC-V 版本)。
关键一步:安装完成后,打开 VS Code 的命令面板(Ctrl+Shift+P),输入“DevEco: Check Environment”,插件会自动检测你的环境是否完整。如果有缺失,它会给出具体的修复建议。我第一次用的时候就是靠这个功能发现 Python 路径没配好。
源码获取与编译烧录
源码获取有两种方式:
- 从官方仓库克隆:
git clone https://gitee.com/openharmony/device_soc_hisilicon.git(以 Hi3861 为例) - 使用 repo 工具:
repo init -u https://gitee.com/openharmony/manifest.git -b master,然后repo sync。这种方式会拉取完整的鸿蒙源码树,适合做深度开发。
编译命令也很直接。以 Hi3861 为例,在源码根目录下执行:
hb set # 选择开发板
hb build -f # 全量编译
编译成功后,会在 out/ 目录下生成烧录文件。烧录时,用 USB 线连接开发板,在 DevEco Device Tool 里选择对应的串口,点击“烧录”按钮。嗯,这里要注意:烧录前一定要确认开发板处于下载模式。Hi3861 需要按住“BOOT”键再上电,STM32 则通常需要将 BOOT0 拉高。