openharmony中hdf框架的设备节点(HdfDeviceNode)和设备实例(HdfDevice)的区别

news/2025/2/21 20:35:22/

设备节点(HdfDeviceNode)和设备实例(HdfDevice)的区别

在 OpenHarmony 驱动框架 HDF 中,设备节点(HdfDeviceNode设备实例(HdfDevice 是两个重要的概念,而且非常容易混淆,它们在设备管理和驱动加载过程中扮演不同的角色。以下是它们的区别和联系:


概述

HdfDevice用于对Host大类别下的小类设备(例如I2C小类、UART小类等)进行集中管理,每一个HdfDevice类对象对应device_info.hcs配置文件中的一个device节点,每一个HdfDeviceNode类对象对应device_info.hcs配置文件中的一个deviceNode节点,配置文件信息如下

root {device_info {platform :: host {hostName = "platform_host";priority = 50;device_uart :: device { //对应HDdevice节点device5 :: deviceNode { //对应HDdeviceNode节点policy = 2;priority = 10;permission = 0660;moduleName = "UART_SAMPLE";serviceName = "HDF_PLATFORM_UART_5";deviceMatchAttr = "sample_uart_5";}device1 :: deviceNode { //一个HDdevice可以内含多个HDdeviceNode节点xxx....}}}}
}

为了更清楚的了解他们之间的关系,画了如下类图:

在这里插入图片描述

根据以上类图和业务代码的梳理可得出以下信息:

1. 设备节点(HdfDeviceNode

设备节点是 HDF 框架中用于描述单个设备的具体实例(例如UART0、I2C1等)。它包含了设备的详细信息和驱动程序的绑定关系,是设备驱动加载和设备服务发布的基础

特点
  • 具体设备的描述
    • 设备节点包含了设备的元数据,如设备 ID(devId)、设备管理策略(policy)、服务名称(servName)等。
    • 它还包含了设备的驱动程序入口(driver),用于加载和初始化驱动。
  • 设备服务发布
    • 设备节点负责将设备的服务发布(PlublishService)到设备服务管理器(DevSvcManager),使得其他模块可以通过服务名称访问设备的功能。
  • 生命周期管理
    • 设备节点的生命周期从设备驱动匹配开始,到设备服务发布结束。
    • 它可以被动态添加或移除,例如通过热插拔机制。
关键属性
  • devId: 设备的唯一标识符。
  • driver: 设备的驱动程序入口(HdfDriverEntry)。
  • deviceObject: 设备对象(HdfDeviceObject),用于设备服务的发布。
  • token: 设备令牌(IHdfDeviceToken),用于在设备管理服务中标识设备。
  • servName: 设备的服务名称,用于发布服务。

2. 设备实例(HdfDevice

设备实例是 HDF 框架中用于管理一组设备节点的高层抽象。它负责协调多个设备节点的生命周期,并提供统一的设备管理接口。

特点
  • 设备集合管理
    • 设备实例可以管理多个设备节点,将它们组织在一起。
    • 它维护了一个设备节点列表(devNodes),用于跟踪所有附加到该实例的设备节点。
  • 设备生命周期协调
    • 设备实例负责协调设备节点的启动、停止和卸载。
    • 它提供统一的接口(如 HdfDeviceAttachHdfDeviceDetach),用于管理设备节点的生命周期。
  • 设备 ID 索引管理
    • 设备实例维护设备 ID 的索引,便于通过设备 ID 快速查找设备节点。
关键属性
  • devNodes: 设备节点的双向链表,用于管理所有附加的设备节点。
  • deviceCount: 当前管理的设备节点数量。
  • deviceIdIndex: 设备 ID 的索引表,用于快速查找设备节点。

3. 区别

特性设备节点(HdfDeviceNode设备实例(HdfDevice
作用范围描述单个设备的具体信息和驱动绑定关系管理一组设备节点的生命周期和集合
生命周期从驱动匹配到服务发布从设备实例创建到销毁
关键功能设备驱动加载、初始化、服务发布设备节点管理、生命周期协调、设备 ID 索引管理
核心属性devIddriverdeviceObjecttokendevNodesdeviceCountdeviceIdIndex
是否可以动态添加可以(例如通过热插拔)通常作为高层管理实体,较少动态变化

4. 联系

设备节点和设备实例是紧密相关的:

  • 设备节点是设备实例的组成部分
    • 设备实例通过设备节点列表(devNodes)管理多个设备节点。
    • 设备节点的生命周期由设备实例协调。
  • 设备实例提供统一管理接口
    • 设备实例通过接口(如 HdfDeviceAttachHdfDeviceDetach)管理设备节点的附加和分离。
    • 设备实例负责为设备节点分配设备 ID,并维护设备 ID 的索引。

5. 总结

  • 设备节点(HdfDeviceNode 是 HDF 框架中描述单个设备的具体实例,负责设备驱动的加载、初始化和服务发布。
  • 设备实例(HdfDevice 是用于管理一组设备节点的高层抽象,负责协调设备节点的生命周期,并提供统一的设备管理接口。
  • 设备节点是设备实例的组成部分,设备实例通过设备节点列表管理设备节点的生命周期。

理解它们的区别和联系有助于更好地掌握 HDF 框架中设备管理和驱动加载的机制。

参考资料

《沉浸式剖析openharmony源代码》


http://www.ppmy.cn/news/1573973.html

相关文章

整合Salesmart/WhatsApp、开源Odoo模块和Deepseek AI能力,实现针对国外客户的智能客服和个性化推荐服务

一、项目背景 本文提出了一套针对软管制造公司的智能客服与个性化推荐系统实施方案,旨在通过整合开源Odoo模块、Salesmart/WhatsApp以及Deepseek AI能力,打造一个724小时不间断服务的智能化平台,专注于服务国外客户。方案围绕实现不间断服务…

python游戏库入门:ursina游戏引擎——复原《我的世界》

目录 : 主要特性 依赖库: 第一个 ursina代码: 创建一个物体: 代码解读: 复原《我的世界》: 总结 Ursina 是一个用于创建 3D 游戏和应用程序的 Python 游戏引擎。它基于 Panda3D 引擎构建&#xff0c…

ARM Linux平台下 OpenCV Camera 实验

一、硬件原理 1. OV2640 1.1 基本功能 OV2640 是一款低功耗、高性能的图像传感器,支持以下功能: 最高分辨率:200 万像素(1600x1200)。 输出格式:JPEG、YUV、RGB。 内置图像处理功能:自动曝…

Java Swing 学习笔记

一、什么是Swing swing是一个比较老的技术了,我觉得学习它还是很有必要的,也比较容易激发学习的兴趣。 Swing 是构建在 AWT(Abstract Window Toolkit)之上的轻量级 GUI 工具包,用于创建跨平台的图形用户界面。与 AWT…

老游戏回顾:SOR

被称为QTE之子,销量约130w。CE引擎打造,画面精美。 以罗马帝国为背景的一款动作游戏,游戏中玩家将化身罗马将领马略提图斯(Marius Titus),为了替家族的死亡复仇而投身军旅,率领罗马战士展开一场…

火绒V6.0小工具提取版——无需安装,一键解锁实用功能!

在国内众多杀毒软件中,火绒无疑是口碑最佳的存在。它完全免费,无需登录,没有会员限制,也没有恼人的弹窗广告,使用体验直接“吊打”某些知名收费杀毒软件。即便火绒如此好用,仍有不少朋友选择“裸奔”。毕竟…

js解析后端传来的如图示的list集合,怎么获取每个map的key和value

如图示&#xff0c;后端传到前端的questTypeList是一个HashMap的list集合 使用c标签将传来的集合放到下拉单选框中&#xff0c; <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core" %><html> <body><form action"yo…

深度学习之梯度下降法

1.梯度下降算法原理 梯度下降算法是一种常用于机器学习和深度学习中的优化算法&#xff0c;其核心目的是找到使目标函数最小化的参数值。梯度下降算法的直观理解可以类比为一个人在山上寻找最低点的过程。在这个过程中&#xff0c;人会沿着最陡峭的下坡路走&#xff0c;每走一…