【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发-第2章 内核HDF驱动框架架构

embedded/2025/3/1 10:58:01/

  瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。


【本文摘自】【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发

【相关视频】OpenHarmony学习开发系列教程(第1期 北向基础篇一)

                     OpenHarmony学习开发系列教程(第2期 南向基础篇一)


第2章 内核HDF驱动框架架构

本篇实战我们将要配置HDF驱动控制LED,在配置之前,我们首先要明白什么是HDF,以及HDF驱动开发的相关概念。

2.1 驱动架构

下面的视频——OpenHarmony功能框架

P2_OpenHarmony功能框架_哔哩哔哩_bilibili中提到了HDF(Hardware Driver Foundation)。接下来我们了解一下什么是HDF。

HDF(Hardware Driver foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载,驱动服务管理和驱动消息机制。旨在构建统一的驱动架构平台,为驱动开发者提供更精准,更高效的开发环境,力求做到一次开发,多系统部署。

HDF驱动架构采用C 语言面向对象编程模型构建,通过平台解耦,内核解耦,来达到兼容不同内核,统一平台底座的目的。HDF驱动框架架构如图所示:

 

  1. HDF驱动架构主要组成部分:
  2. HDI(Hardware Device Interface,硬件设备统一接口)层:通过规范化的设备接口标准,为系统提供统一、稳定的硬件设备操作接口。
  3. HDF驱动框架:提供统一的硬件资源管理、驱动加载管理、设备节点管理、设备电源管理以及驱动服务模型等功能,需要包含设备管理、服务管理、DeviceHost、PnPManager等模块。
  4. 统一的配置界面:支持硬件资源的抽象描述,屏蔽硬件差异,可以支撑开发者开发出与配置信息不绑定的通用驱动代码,提升开发及迁移效率,并可通过HC-Gen等工具快捷生成配置文件。
  5. 操作系统抽象层(OSAL,Operating System Abstraction Layer):提供统一封装的内核操作相关接口,屏蔽不同系统操作差异,包含内存、锁、线程、信号量等接口。
  6. 平台驱动:为外设驱动提供Board硬件(如:I2C/SPI/UART总线等平台资源)操作统一接口,同时对Board硬件操作进行统一的适配接口抽象以便于不同平台迁移。
  7. 外设驱动模型:面向外设驱动,提供常见的驱动抽象模型,主要达成两个目的,提供标准化的器件驱动,开发者无需独立开发,通过配置即可完成驱动的部署;提供驱动模型抽象,屏蔽驱动与不同系统组件间的交互,使得驱动更具备通用性。

2.2 平台驱动

OpenHarmony平台驱动(Platform Driver)是为平台设备(Platform Device)提供驱动支持的接口,帮助系统和外设之间的互通。这里的平台设备包括总线接口(如I2C、UART)以及特定硬件资源(如GPIO、RTC等)。平台驱动框架是OpenHarmony驱动框架的核心部分,基于HDF驱动框架、操作系统适配层和驱动配置管理,提供一个统一的标准模型,帮助开发者实现各类平台设备驱动。

平台驱动框架的主要特点包括:

  1. 统一的平台设备访问接口:为平台设备操作提供统一的接口,屏蔽不同硬件平台(SoC)和操作系统(OS)的差异。
  2. 统一的适配接口:为平台设备驱动提供统一的接口,让开发者只需关注硬件控制,而无需关心设备管理或其他公共流程。
  3. 提供公共能力:提供设备注册、管理、访问控制等功能,且与特定SoC平台无关。

平台驱动框架支持的设备类型包括但不限于:ADC、DAC、GPIO、HDMI、I2C、I3C、MIPI_CSI、MIPI_DSI、MMC、Pin、PWM、Regulator、RTC、SDIO、SPI、UART、WatchDog等。

2.3 外设驱动

OpenHarmony在HDF驱动框架和平台驱动框架的基础上,为外设设备提供了标准化的驱动模型。这些驱动模型可以帮助开发者减少重复开发工作,并提供统一的抽象层,屏蔽了驱动与系统其他组件之间的复杂交互,使得驱动更加通用、易于移植。

目前,OpenHarmony支持的外设设备类型包括但不限于:音频(Audio)、摄像头(Camera)、编解码器(Codec)、人脸识别(Face_auth)、指纹识别(Fingerprint_auth)、LCD屏幕(LCD)、灯光控制(Light)、运动传感器(Motion)、引脚认证(Pin_auth)、传感器(Sensor)、触摸屏(Touchscreen)、USB、用户认证(User_auth)、振动器(Vibrator)、无线局域网(WLAN)等。

2.4 HCS简介

HCS(HDF Configuration Source)是HDF驱动框架的配置描述源码,内容以Key-Value为主要形式。它实现了配置代码与驱动代码解耦,便于开发者进行配置管理。HC-GEN(HDF Configuration Generator) 是HCS配置转换工具,可以将HDF配置文件转换为软件可读取的文件格式。在高性能环境中,HCS经过HC-GEN编译生成HCB(HDF Configuration Binary)二进制文件,HDF驱动框架中的HCS Parser模块会从HCB文件中重建配置树,HDF驱动模块使用HCS Parser提供的配置读取接口获取配置内容。HCB配置使用流程图如下图所示:

接下来介绍一下HCS的语法,HCS配置语法保留了以下关键字。

(1)保留关键字

关键字

用途

说明

root

配置根节点

-

include

引用其他HCS配置文件

-

delete

删除节点或属性

只能用于操作include导入的配置树

template

定义模板节点

-

match_attr

用于标记节点的匹配查找属性

解析配置时可以使用该属性的值查找到对应节点

(2)基本结构

HCS主要分为属性(Attribute)和节点(Node)两种结构。

属性

属性是最小的配置单元,表示一个独立的配置项,语法格式如下:

attribute_name = value;

  • attribute_name:由字母、数字、下划线组成,且必须以字母或下划线开头,字母区分大小写。
  • value:可以是以下几种类型:

数字常量:支持二进制、八进制、十进制、十六进制,具体类型参考数据类型部分。

字符串:使用双引号("")括起来。

节点引用:可以引用其他节点

 


http://www.ppmy.cn/embedded/169034.html

相关文章

自动化测试无法启动(java.net.SocketException)

在运行测试代码,对浏览器进行自动化操作时,遇到了以下问题,添加依赖,编写了测试代码,但是程序无法运行 这个有两种原因(我使用的是谷歌浏览器): 网络问题: 因为需要从GitHub上下载对应包,所以有时候可能会出现网络问题,这个时候可以打开VPN之后,重新对程序进行启动 浏览器版本…

Linux系统软件管理

systemctl 控制软件启动和关闭 Linux系统很多软件支持使用systemctl命令控制:启动,停止,开启自启。 能被systemctl管理的软件,一般被称为:服务。 语法:systemctl start|stop|status|enable|disable 服务名…

FFmpeg av_read_frame 和iOS系统提供的 AVAudioRecorder 实现音频录制的区别

1. 第一种方式:使用 FFmpeg 的 av_read_frame 特点 底层实现:基于 FFmpeg,这是一个强大的多媒体处理库,直接操作音频流。灵活性:非常灵活,可以处理多种音频格式、编解码器和输入设备。复杂性:需要手动管理音频流、数据包(AVPacket)、内存释放等,代码复杂度较高。跨平…

ChatGPT Deep Research:重塑智能研究的未来边界

目录 **ChatGPT Deep Research:重塑智能研究的未来边界****核心功能与技术突破****技术架构与性能优势****部署计划与用户价值****未来展望与挑战****结语**ChatGPT Deep Research:重塑智能研究的未来边界 引言 在人工智能技术飞速迭代的今天,OpenAI推出的Deep Research功能…

C++11相较于C++98的新特性介绍:列表初始化,右值引用与移动语义

一,列表初始化 1.1C98中传统的{} C98中一般数组和结构体可以使用{}进行初始化: struct Date {int _year;int _month;int _day; };int main() {int a[] { 1,2,3,4,5 };Date _date { 2025,2,27 };return 0; } 1.2C11中的{} C11以后想统一初始化方式&…

Redis 深度解析

Redis 是一个开源的、内存中的数据结构存储系统,它支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合&#xff0…

【每日论文】Rank1: Test-Time Compute for Reranking in Information Retrieval

下载PDF或阅读论文,请点击:LlamaFactory - huggingface daily paper - 每日论文解读 | LlamaFactory | LlamaFactory 摘要 我们推出了Rank1,这是第一个旨在利用测试时计算能力的重排序模型。Rank1展示了在检索中利用推理语言模型&#xff08…

【第八节】C++设计模式(结构型模式)-Decorator(装饰器)模式

目录 一、问题引出 二、模式选择 三、代码实现 四、总结讨论 一、问题引出 装饰器模式:动态扩展对象功能的设计模式 在面向对象(OO)设计与开发中,我们常面临为已有类添加新职责的需求。传统方法是通过继承创建子类来实现功能扩…