
疯壳-鸿蒙OS-HDF驱动框架
一、简介
HDF(HarmonyOS Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理和驱动消息机制。旨在构建统一的驱动架构平台,为驱动开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。
驱动加载:
HDF驱动加载包括按需加载和按序加载:
1.驱动按需加载
HDF框架支持驱动在系统启动过程中默认加载,或者在系统启动之后动态加载。
2.驱动按序加载
HDF框架支持驱动在系统启动的过程中按照驱动的优先级进行加载。
驱动服务管理:
HDF框架可以集中管理驱动服务,开发者可直接通过HDF框架对外提供的能力接口获取驱动相关的服务。
驱动消息机制:
HDF框架提供统一的驱动消息机制,支持用户态应用向内核态驱动发送消息,也支持内核态驱动向用户态应用发送消息。
二、驱动模型
HDF框架以组件化的驱动模型作为核心设计思路,为开发者提供更精细化的驱动管理,让驱动开发和部署更加规范。HDF框架将一类设备驱动放在同一个host里面,开发者也可以将驱动功能分层独立开发和部署,支持一个驱动多个node,HDF框架管理驱动模型如下图所示:
三、驱动开发实例
驱动添加
驱动服务管理
驱动消息机制
此外这个过程中还会设计到HCS(HDF驱动框架配置描述)等内容。
本文档接下来的内容会先给大家讲解如何添加驱动。
四、鸿蒙OS驱动添加
A)在源码路径:/home/test/hmos2/vendor/huawei/hdf下创建一个test文件夹,用来保存我们新添的驱动文件,如下:B)在test文件夹下新建一个sample_driver.c的驱动文件,并编写我们的驱动代码,如下:
)此时驱动文件默认是不参与编译的,接下来我们需要做一下驱动文件编译必要的配置工作:
添加驱动配置信息
驱动配置分为两个部分——HDF框架定义的驱动设备描述和驱动的私有配置信息
驱动设备描述:
HDF框架加载驱动所需要的信息来源于HDF框架定义的驱动设备描述,因此该项是驱动添加的必选项,我
们需要在HDF框架定义的配置文件中添加对应的设备描述,打开源码路径:
vendor/hisi/hi35xx/hi3518ev300/config/device_info/
下的device_info/device_info.hcs文件,新添我们的设备驱动描述信息。
此处设备描述信息添加有两种方式,第一种是新建一个sample_host节点:
添加的结果如下图所示:
另一种方式在原有源码配置plaform节点中添加(此时添加认为新增的驱动跟platform中的设备是同类设备):
添加的结果如下图所示:
以上内容中驱动服务发布策略policy为2表示驱动对内核态和用户态都发布服务。
priority(取值范围为整数0到200)是用来表示host和驱动的优先级,即驱动按序加载,不同的host内的驱动,host的priority值越小,驱动加载优先级越高;同一个host内驱动的priority值越小,加载优先级越高。
preload 字段取值为如下的枚举量:
配成0(DEVICE_PRELOAD_ENABLE ),则系统启动过程中默认加载;配成1(DEVICE_PRELOAD_DISABLE),则系统启动过程中默认不加载,支持后续动态加载,当用户态获取驱动服务时,如果驱动服务不存在时,HDF框架会尝试动态加载该驱动。
驱动私有配置信息:
如果驱动有私有配置,则可以添加一个驱动的配置文件,用来填写一些驱动的默认配置信息,HDF框架在加载驱动的时候,该配置非必须项。
在源码路径vendor/hisi/hi35xx/hi3518ev300/config/下新建一个test文件夹,用于存放我们驱动的私有配置文件,新增一个sample_config.hcs,用来配置驱动私有信息:
将该私有配置文件添加到板级配置入口文件hdf.hcs:
驱动编译配置项
驱动代码的编译必须要使用HDF框架提供的Makefile模板进行编译,具体可参考驱动文件夹test同级目录下的sample文件中的示例。
在test目录下新增Kconfig文件,如下:
驱动编译配置项
驱动代码的编译必须要使用HDF框架提供的Makefile模板进行编译,具体可参考驱动文件夹test同级目录下的sample文件中的示例。
在test目录下新增Kconfig文件,如下:
在test目录下新增Makefile文件如下:
将上述Kconfig文件添加到test文件夹同级目录下的Kconfig文件中:
修改test文件夹同级目录下的hdf_vendor.mk文件:
Ps: LITEOS_BASELIB += -lsample_driver
LIB_SUBDIRS += $(VENDOR_HDF_DRIVERS_ROOT)/test
到此我们sample_driver 驱动就已经添加到源码的配置中了,接下来只需编译即可。
源码:
————————————————
版权声明:本文为CSDN博主「fengkesz」的原创文章
