瑞芯微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驱动框架架构如图所示:
- HDF驱动架构主要组成部分:
- HDI(Hardware Device Interface,硬件设备统一接口)层:通过规范化的设备接口标准,为系统提供统一、稳定的硬件设备操作接口。
- HDF驱动框架:提供统一的硬件资源管理、驱动加载管理、设备节点管理、设备电源管理以及驱动服务模型等功能,需要包含设备管理、服务管理、DeviceHost、PnPManager等模块。
- 统一的配置界面:支持硬件资源的抽象描述,屏蔽硬件差异,可以支撑开发者开发出与配置信息不绑定的通用驱动代码,提升开发及迁移效率,并可通过HC-Gen等工具快捷生成配置文件。
- 操作系统抽象层(OSAL,Operating System Abstraction Layer):提供统一封装的内核操作相关接口,屏蔽不同系统操作差异,包含内存、锁、线程、信号量等接口。
- 平台驱动:为外设驱动提供Board硬件(如:I2C/SPI/UART总线等平台资源)操作统一接口,同时对Board硬件操作进行统一的适配接口抽象以便于不同平台迁移。
- 外设驱动模型:面向外设驱动,提供常见的驱动抽象模型,主要达成两个目的,提供标准化的器件驱动,开发者无需独立开发,通过配置即可完成驱动的部署;提供驱动模型抽象,屏蔽驱动与不同系统组件间的交互,使得驱动更具备通用性。
2.2 平台驱动
OpenHarmony平台驱动(Platform Driver)是为平台设备(Platform Device)提供驱动支持的接口,帮助系统和外设之间的互通。这里的平台设备包括总线接口(如I2C、UART)以及特定硬件资源(如GPIO、RTC等)。平台驱动框架是OpenHarmony驱动框架的核心部分,基于HDF驱动框架、操作系统适配层和驱动配置管理,提供一个统一的标准模型,帮助开发者实现各类平台设备驱动。
平台驱动框架的主要特点包括:
- 统一的平台设备访问接口:为平台设备操作提供统一的接口,屏蔽不同硬件平台(SoC)和操作系统(OS)的差异。
- 统一的适配接口:为平台设备驱动提供统一的接口,让开发者只需关注硬件控制,而无需关心设备管理或其他公共流程。
- 提供公共能力:提供设备注册、管理、访问控制等功能,且与特定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:可以是以下几种类型:
数字常量:支持二进制、八进制、十进制、十六进制,具体类型参考数据类型部分。
字符串:使用双引号("")括起来。
节点引用:可以引用其他节点