> 技术文档 > [HarmonyOS] Harmony LiteOS-A 驱动框架深度解析:HDF 让万物互联更简单

[HarmonyOS] Harmony LiteOS-A 驱动框架深度解析:HDF 让万物互联更简单


Harmony LiteOS-A 驱动框架深度解析:HDF 让万物互联更简单

关键词:LiteOS-A、HDF、OpenHarmony、驱动框架、一次开发多端部署

文章目录

  • Harmony LiteOS-A 驱动框架深度解析:HDF 让万物互联更简单
    • 1 为什么需要 HDF?
    • 2 HDF 整体架构
    • 3 驱动模型:从“入口”到“设备节点”
      • 3.1 配置文件示例(sample_config.hcs)
      • 3.2 驱动入口结构体
    • 4 弹性化部署:LiteOS-A 与 Linux 双栈支持
    • 5 驱动开发 5 步曲
    • 6 典型应用案例
    • 7 展望:HDF 3.0 路线图
    • 8 结语

在 IoT 碎片化的时代,同一款温湿度传感器可能今天挂在 128 KB 内存的 MCU 上,明天又要跑在 128 MB 内存的 AI 相机里。如何让驱动代码“写一次、到处跑”,Harmony LiteOS-A 给出的答案是:HDF(Hardware Driver Foundation)统一驱动框架。本文将从顶层设计到落地细节,带你拆解 LiteOS-A 中的 HDF 全貌。


1 为什么需要 HDF?

碎片化痛点 HDF 解药 SoC 厂家接口差异大 归一化平台底座,统一 HAL 内核不同(LiteOS-M/A、Linux) OSAL 抽象,驱动与内核解耦 内存跨度百 KB → GB 弹性化架构,可裁剪、可组合 驱动与系统服务耦合 组件化设备模型,服务发现机制

一句话:HDF 让驱动变成可插拔的“积木”,在不同芯片、不同内核、不同容量设备之间自由拼装 。


2 HDF 整体架构

LiteOS-A 内核中,HDF 与基础内核、文件系统、网络协议栈并列,构成“内核 + 框架 + 接口”三层结构 :

┌-------------------------------------------------┐│  用户态/内核态应用  │├-------------------------------------------------┤│ POSIX 接口(1200+ 标准 API)  │├-------------------------------------------------┤│ 扩展组件:VFS、网络、安全、HDF 框架  │├-------------------------------------------------┤│ 基础内核:调度、内存、中断、IPC、虚拟内存 │└-------------------------------------------------┘

HDF 自身又拆为 Host、Manager、Support 三层 :

模块 职责 代码位置 Host 管理同类设备驱动生命周期:加载、电源、服务发布 drivers/framework/core/host Manager 全局资源管控:Host 列表、设备电源、服务表 …/core/manager Support 平台无关的基础能力:
• OSAL(线程、互斥量、定时器)
• Platform(GPIO/I²C/SPI 等硬件抽象) …/support/{posix,platform}

3 驱动模型:从“入口”到“设备节点”

HDF 把“驱动”拆成 3 个可复用单元:

  1. Driver Entry:驱动代码本身,实现 Bind, Init, Release 回调。
  2. DeviceNode:对应一个物理/逻辑设备,配置在 *.hcs 文件。
  3. Host:同一类设备的容器,可静态或动态加载。

3.1 配置文件示例(sample_config.hcs)

sample_host :: host { hostName = \"i2c_sensor_host\"; priority = 100;  // 加载优先级 0~200 device_sensor :: device { device0 :: deviceNode { policy = 2; // 向内核态+用户态发布服务 preload = 0; // 开机即加载 moduleName = \"hts221\"; // 驱动入口名 serviceName = \"humidity_sensor\"; deviceMatchAttr = \"hts221_config\"; } }}
  • policy
    0=不发布 1=内核态 2=内核+用户态 3=订阅模式 4=私有模式
  • preload
    0=开机加载 1=快启后加载 2=按需动态加载
  • deviceMatchAttr 与驱动私有表匹配,实现“同驱动多实例” 。

3.2 驱动入口结构体

struct HdfDriverEntry g_sensorDriver = { .moduleVersion = 1, .moduleName = \"hts221\", .Bind = Hts221Bind, // 创建设备实例 .Init = Hts221Init, // 初始化硬件 .Release = Hts221Release,};HDF_INIT(g_sensorDriver);

4 弹性化部署:LiteOS-A 与 Linux 双栈支持

目标系统 驱动形态 部署策略 LiteOS-A 轻量设备 仅内核态 公版驱动 + 裁剪配置 → 百 KB 级镜像 标准 Linux 设备 内核态 + 用户态 • 内核态:HDF + 原生 Linux 驱动并存
• 用户态:HDI(Hardware Device Interface)服务化,支持热插拔、动态权限

HDF 通过 OSALmutexthreadmemory 等调用映射到不同内核,实现“零改动”迁移。


5 驱动开发 5 步曲

  1. 实现驱动代码
    使用 HDF 提供的 OSAL & Platform 接口,禁止直接调用底层寄存器。
  2. 编写设备配置
    在板级 hdf.hcs#include 你的 xxx_config.hcs
  3. 添加编译规则
    drivers/adapter/khdf/liteos/BUILD.gn 注册源文件。
  4. 构建 & 烧录
    hb build -f && hb burn
  5. 验证
    用户态通过 DevSvcMgrClntGetService(\"humidity_sensor\") 获取句柄,读写数据。

6 典型应用案例

  • 润和 HiSpark Taurus(Hi3516DV300)
    Camera、LCD、Touch、SDIO-WiFi 全由 HDF 驱动,一套代码跑 LiteOS-A & Linux 双系统 。
  • 智能温湿度计
    128 KB Flash 设备上,仅保留 I²C + Sensor Host,裁剪后固件 < 90 KB。

7 展望:HDF 3.0 路线图

  • 热插拔事件总线(已合入 LTS3.0):USB、SD 卡即插即用
  • HDI-Gen 工具链:IDL 描述硬件接口 → 自动生成用户态 stub & 内核态 proxy
  • 更多公版驱动:Audio、Camera、USB DDK、Sensor Hub 持续新增

8 结语

LiteOS-A 通过 HDF 把“驱动”从重耦合、难移植的内核模块变成了可描述、可配置、可插拔的积木组件
无论你是芯片厂、设备厂还是方案商,只需关注 驱动本身的价值逻辑,剩下的交给 HDF 去适配万物。

参考源码:drivers/framework
官方文档:OpenHarmony HDF 驱动开发指南



研究学习不易,点赞易。
工作生活不易,收藏易,点收藏不迷茫 :)