《鸿蒙智能互联设备开发(微课版)》 课件 6.1.3 HDF驱动开发步骤_第1页
《鸿蒙智能互联设备开发(微课版)》 课件 6.1.3 HDF驱动开发步骤_第2页
《鸿蒙智能互联设备开发(微课版)》 课件 6.1.3 HDF驱动开发步骤_第3页
《鸿蒙智能互联设备开发(微课版)》 课件 6.1.3 HDF驱动开发步骤_第4页
《鸿蒙智能互联设备开发(微课版)》 课件 6.1.3 HDF驱动开发步骤_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6.1.3HDF驱动开发步骤通过本节学习,您可以:了解HDF驱动开发步骤HDF驱动开发步骤HDF框架的驱动开发的组成部分:驱动实现、驱动编译脚本编写和驱动配置。1.驱动实现:驱动实现包含驱动业务代码实现和驱动入口注册,具体写法如下:(1)驱动业务代码模板

#include"hdf_device_desc.h"//HDF框架对驱动开发相关能力接口的头文件

#include"hdf_log.h"//HDF框架提供的日志接口头文件

#defineHDF_LOG_TAGtest_driver//打印日志所包含的标签,如果不定义则用默认定义的HDF_TAG标签。

//将驱动对外提供的服务能力接口绑定到HDF框架。

int32_tHdfTestDriverBind(structHdfDeviceObject*deviceObject){

HDF_LOGD("Testdriverbindsuccess");

returnHDF_SUCCESS;

}

//驱动自身业务初始化的接口

int32_tHdfTestDriverInit(structHdfDeviceObject*deviceObject){

HDF_LOGD("TestdriverInitsuccess");

returnHDF_SUCCESS;

}

//驱动资源释放的接口

voidHdfTestDriverRelease(structHdfDeviceObject*deviceObject){

HDF_LOGD("Testdriverreleasesuccess");

return;

}HDF驱动开发步骤(2)驱动入口注册到HDF框架

structHdfDriverEntryg_testDriverEntry={

.moduleVersion=1,

.moduleName="test_driver",

.Bind=HdfTestDriverBind,

.Init=HdfTestDriverInit,

.Release=HdfTestDriverRelease,

};

//调用HDF_INIT将驱动入口注册到HDF框架中。在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动;当Init调用异常时,HDF框架会调用Release释放驱动资源并退出。

HDF_INIT(g_testDriverEntry);驱动注册,就是实例化驱动入口,驱动入口必须为HdfDriverEntry(在hdf_device_desc.h中定义)类型的全局变量,且moduleName要和device_info.hcs中保持一致。HDF框架会将所有加载的驱动的HdfDriverEntry对象首地址汇总,形成一个类似数组的段地址空间,方便上层调用。HDF驱动开发步骤2.驱动编译脚本编写添加模块BUILD.gn把新增模块的BUILD.gn所在的目录添加到上一级BUILD.gn文件中

import("//drivers/adapter/khdf/liteos/hdf.gni")

hdf_driver("hdf_led"){

sources=[

"led.c",#此处为点灯实验,根据实验进行修改

]

include_dirs=[

"//device/st/drivers/module_driver/Module_Common/inc/",

]}

group("drivers"){

deps=[

"led",#新增模块BUILD.gn的名称,根据实验进行修改

]

}HDF驱动开发步骤3.驱动配置驱动配置包含两部分:HDF框架定义的驱动设备描述和驱动的私有配置信息。(1)驱动设备描述HDF框架加载驱动所需要的信息来源于HDF框架定义的驱动设备描述,因此基于HDF框架开发的驱动必须要在HDF框架定义的device_info.hcs配置文件中添加对应的设备描述。

root{

device_info{

match_attr="hdf_manager";HDF驱动开发步骤

templatehost{//host模板,继承该模板的节点(如下test_host)如果使用模板中的默认值,则节点字段可以缺省。

hostName="";

priority=100;

templatedevice{

templatedeviceNode{

policy=0;

priority=100;

preload=0;

permission=0664;

moduleName="";

serviceName="";

deviceMatchAttr="";

}

}

}HDF驱动开发步骤

platform::host{

hostName="platform_host";//host名称,host节点是用来存放某一类驱动的容器。

priority=50;//host启动优先级(0-200),值越大优先级越低,建议默认配100,优先级相同则不保证host的加载顺序。

device_led::device{//led设备节点

device0::deviceNode{//led驱动的DeviceNode节点

policy=2;//policy字段是驱动服务发布的策略

priority=200;//驱动启动优先级(0-200),值越大优先级越低,建议默认配100,优先级相同则不保证device的加载顺序

preload=0;//驱动按需加载字段

permission=0777;//驱动创建设备节点权限

moduleName="HDF_LED";//驱动名称,该字段的值必须和驱动入口结构的moduleName值一致

serviceName="hdf_led";//驱动对外发布服务的名称,必须唯一

deviceMatchAttr="st_stm32mp157_led";//驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等

}

}

}

}}HDF驱动开发步骤(2)驱动私有配置信息如果驱动有私有配置,则可以添加一个驱动的配置文件,用来填写一些驱动的默认配置信息。HDF框架在加载驱动的时候,会将对应的配置信息获取并保存在HdfDeviceObject中的property里面,通过Bind和Init传递给驱动。驱动的配置信息示例如下:配置信息定义之后,需要将该配置文件添加到板级配置入口文件hdf.hcs,示例如下:

root{

LedDriverConfig{

led_gpio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论