首页 > 其他分享 >凌蒙派-RK3568开发板-基础外设类:简易HDF驱动

凌蒙派-RK3568开发板-基础外设类:简易HDF驱动

时间:2023-08-28 11:04:13浏览次数:47  
标签:框架 RK3568 凌蒙派 配置 HDF 3.2 驱动 加载

1、案例简介

该程序是基于OpenHarmony标准系统编写的基础外设类:简易HDF驱动。

目前已在凌蒙派-RK3568开发板跑通。

详细资料请参考官网:https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk3568-openharmony

2、基础知识

2.1、OpenHarmony HDF开发简介

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

2.2、OpenHarmony HDF驱动开发

HDF(Hardware Driver Foundation)框架以组件化的驱动模型作为核心设计思路,为开发者提供更精细化的驱动管理,让驱动开发和部署更加规范。HDF框架将一类设备驱动放在同一个Host(设备容器)里面,用于管理一组设备的启动加载等过程。在划分Host时,驱动程序是部署在一个Host还是部署在不同的Host,主要考虑驱动程序之间是否存在耦合性,如果两个驱动程序之间存在依赖,可以考虑将这部分驱动程序部署在一个Host里面,否则部署到独立的Host中是更好的选择。Device对应一个真实的物理设备。DeviceNode是设备的一个部件,Device至少有一个DeviceNode。每个DeviceNode可以发布一个设备服务。驱动即驱动程序,每个DevicdNode唯一对应一个驱动,实现和硬件的功能交互。HDF驱动模型如下图所示:

::: hljs-center

图片1.png

:::

2.3、OpenHarmony HDF驱动加载

HDF驱动框架提供把和配置的设备列表匹配成功的驱动程序加载起来的功能。

支持按需加载和按序加载两种策略,具体设备的加载策略由配置文件中的preload字段来控制,配置值参考如下: 图片2.3.png

2.3.1、按需加载

  • preload字段配置为0(DEVICE_PRELOAD_ENABLE),则系统启动过程中默认加载。
  • preload字段配置为1(DEVICE_PRELOAD_ENABLE_STEP2),当系统支持快速启动的时候,则在系统完成之后再加载这一类驱动,否则和DEVICE_PRELOAD_ENABLE含义相同。
  • preload字段配置为2(DEVICE_PRELOAD_DISABLE),则系统启动过程中默认不加载,支持后续动态加载,当用户态获取驱动服务时,如果驱动服务不存在,HDF框架会尝试动态加载该驱动。

2.3.2、按序加载(默认加载策略)

配置文件中的priority(取值范围为整数0到200)是用来表示host(驱动容器)和驱动的优先级。不同的host内的驱动,host的priority值越小,驱动加载优先级越高;同一个host内驱动的priority值越小,加载优先级越高。

2.4、OpenHarmony HDF驱动服务管理

驱动服务是HDF驱动设备对外提供能力的对象,由HDF框架统一管理。驱动服务管理主要包含驱动服务的发布和获取。

2.4.1、驱动服务的发布策略

HDF框架定义了驱动对外发布服务的策略,由配置文件中的policy字段来控制,policy字段的取值范围以及含义如下: 2.4.1.png

2.4.2、驱动服务的接口说明

针对驱动服务管理功能,HDF框架开放了以下接口供开发者调用,如下表所示: ::: hljs-center

图片2.png

:::

2.5、驱动消息机制管理

当用户态应用和内核态驱动需要交互时,可以使用HDF框架的消息机制来实现。

消息机制的功能主要有以下两种:

  • 用户态应用发送消息到驱动。
  • 用户态应用接收驱动主动上报事件。

消息机制接口如下所示: ::: hljs-center

图片3.png

:::

2.6、配置树配置

HCS(HDF Configuration Source)是HDF驱动框架的配置描述源码,内容以Key-Value为主要形式。它实现了配置代码与驱动代码解耦,便于开发者进行配置管理。

HC-GEN(HDF Configuration Generator)是HCS配置转换工具,可以将HDF配置文件转换为软件可读取的文件格式:

  • 在弱性能环境中,转换为配置树源码或配置树宏定义,驱动可直接调用C代码或宏式APIs获取配置。
  • 在高性能环境中,转换为HCB(HDF Configuration Binary)二进制文件,驱动可使用HDF框架提供的配置解析接口获取配置。

以下是使用HCB模式的典型应用场景:

::: hljs-center

图片4.png

:::

HCS经过HC-GEN编译生成HCB文件,HDF驱动框架中的HCS Parser模块会从HCB文件中重建配置树,HDF驱动模块使用HCS Parser提供的配置读取接口获取配置内容。

3、代码解析

3.1、配置文件

3.1.1、device_info.hcs

创建config/device_info.hcs,用于驱动设备描述,具体内容如下: 3.1.1.png 注意:

device_rk3568_sample:为配置树的类设备结点。

deviceMatchAttr:关键字必须与config.hcs的match_attr匹配。

3.1.2、config.hcs

创建config/config.hcs,用于定义私有变量,具体内容如下: 3.1.2.png 由于我们没有用到其他私有变量,故不做定义。

3.1.3、参与配置树编译

编辑//vendor/lockzhiner/rk3568/hdf_config/khdf/hdf.hcs,将device_info.hcs添加配置树中。具体内容如下所示: 3.1.3.png

3.2、HDF驱动

3.2.1、driver_hdf_sample.c

3.2.1.1、头文件

3.2.1.1.png 3.2.1.2、定义打印标签 3.2.1.2.png 建议读者用HDF_LOGI、HDF_LOGE等打印信息。

3.2.1.3、驱动初始化

3.2.1.3.png 3.2.1.4、驱动释放 3.2.1.4.png

3.2.1.5、驱动绑定

将驱动对外提供的服务能力接口绑定到HDF框架,通过struct IDeviceIoService设置Dispatch函数。 3.2.1.5.png HdfSampleDriverDispatch()挂载载struct IDeviceIoService的函数指针成员Dispatch,它相当于Linux的ioctl,可与应用程序进行数据交互。 3.2.1.5..jpg 3.2.1.6、驱动注册 3.5.1.6.png 3.2.2、Makefile 3.2.2.png

3.2.3、参与Linux内核编译

编辑//drivers/hdf_core/adapter/khdf/linux/Makefile,添加一段代码,将sample驱动参与Linux内核编译中。具体如下所示: 3.2.3.png

3.3、应用程序

3.3.1、sample_test.c

3.3.1.png 3.3.2、BUILD.gn 3.3.2.png

3.3.3、参与应用程序编译

编辑//vendor/lockzhiner/rk3568/samples/BUILD.gn,开启sample编译。具体如下: 3.3.3.png

4、编译说明

建议使用docker编译方法,运行如下: 4.png

5、运行结果

该程序运行结果如下所示: 5.png

本文作者:福州市凌睿智捷电子有限公司

想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com/#bkwz​

标签:框架,RK3568,凌蒙派,配置,HDF,3.2,驱动,加载
From: https://blog.51cto.com/harmonyos/7261084

相关文章

  • 迅为RK3568开发板GPIO之外接模块
     在迅为RK3568开发板上有一组GPIO,可以用来外接各种外设模块,从面实现一系列好玩的功能,一起来看看各个模块合集吧    RFID模块:工作电流:13—20mA/直流3.3V空闲电流:10-13mA/直流3.3V休眠电流:<80UA峰值电流:<30mA工作频率:13.56MHz支持的卡类型:mifare1 S50.mifare1 S70.mif......
  • HDFS 读写
    参考链接:http://www.cnblogs.com/laov/p/3434917.html写流程:比如你有一个100M的文件。则写的流程大致如下。a,Client将File分块,分别为block1,和block2(64M,和36M)b,Client向NameNode发送写数据请求。c,NameNode获取Client的请求,记录Block的信息,并返回可用的DataNode,以及B......
  • idea安装bigdata tool 插件 HDFS客户端
    在idea里面下载bigdatatool插件使用hdfs客户端一、下载hadoop安装包,并将文件解压二、在idea的插件里面找到bbigdatatool插件并进行安装 如果在idea里面下载比较慢,可以在官网下载 BigDataTools-IntelliJIDEsPlugin|Marketplace(jetbrains.com) 在idea设置里面......
  • HDFS的文件系统操作命令
    下面分享一下最近学到的HDFS的有关文件系统操作shell命令一、创建文件夹hadoopfs-mkdir[-p]<path>...hdfsdfs-mkdir[-p]<path>...#hadoopfs-mkdir-p/ijc/bigdata#hdfsfs-mkdir-p/jc/hadoop二、查看指定目录下内容hadoopfs-ls[-h][-R][<path>.......
  • HDFS集群启停命令
    HDFS集群启停命令:一键启停脚本#启动$HADOOP_HOME/sbin/start-dfs.sh#停用$HADOOP_HOME/sbin/stop-dfs.sh独立进程启程#脚本一hadoop-daemon.sh(start|status|stop)(namenode|secondarynamenode|datanode)#举例:hadoop-daemon.shstartdatanode#脚本二hdfs--dae......
  • 在VMware虚拟机集群上部署HDFS集群
    本篇博客跟大家分享一下如何在VMware虚拟机集群上部署HDFS集群一·、下载hadoop安装包进入官网:https://hadoop.apache.org 下载hadoop安装包由于ApacheHadoop是国外网址,下载安装包对于网络要求较高 二、上传压缩包,进行解压在进行解压之前,保证自己已经完成vmwa的黄静配置......
  • Hadoop学习笔记、知识点搭建速过、包含Hadoop集群搭建、HDFS、IDE操作hadoop,DFSShell
    大数据概述......
  • 一块迅为RK3568开发板规划的学习路线
    B站可以搜索教程......
  • HDFS shell 常用命令
    创建多级目录(-p):hadoopfs-mkdir-p/test/a/b 展示目录:hadoopfs-ls/ 递归展示:hadoopfs-ls-R/ 从HDFS上下载文件到本地:hadoopfs-get/test/a/b/h.txthadoopfs-copyToLocal  /test/a/b/h.txt 从本地上传文件到HDFS:hadoopfs-copyFromLocalhello......
  • HDFS工作流程与机制
    1、各个角色的职责主角色:NameNode从而,NameNode成为了访问HDFS的唯一入口从角色:DataNode主角色辅助角色:SecondaryNameNodeNameNode职责:DataNode职责:2、HDFS写数据流程(上传文件)流程图:PipeLine管道:HDFS文件系统的一种数据传输方式ACK应答响应:确认字符(计算机网络相......