`
一、前言 本文通过阅读鸿蒙官方文档以及参考论坛其他贡献者经验,熟悉Harmony OS中的HDF驱动框架,进行对AI Camera开发板的GPIO进行控制,来使得开发板上的LED等闪烁。
二、Harmony驱动模型
HDF框架以组件化的驱动模型作为核心设计思路,为开发者提供更精细化的驱动管理,让驱动开发和部署更加规范。HDF框架将一类设备驱动放在同一个host里面,开发者也可以将驱动功能分层独立开发和部署,支持一个驱动多个node,HDF框架管理驱动模型如下图所示:
图1 HDF框架管理驱动模型
基于HDF框架进行驱动的开发主要分为两个部分,驱动实现和驱动配置。
三、确定LED硬件IO
通过查看AI Camera开发板原理图可知,绿灯对应的控制管脚为GPIO2_3,换算成GPIO号为2*8+3=19,如下图所示:
图2 绿色LED灯硬件管脚
四、编写内核态LED驱动代码
1,在vendor/huawei/hdf目录下创建led目录;
2,在led目录中,分别创建led.c驱动文件、Makefile文件和driver目录,具体代码见附件;
3,在driver目录中,创建Kconfig文件,具体代码见附件;
4,修改vendor/huawei/hdf/hdf_vendor.mk,在最下面增加:
- LITEOS_BASELIB += -lhdf_led_driver
- LIB_SUBDIRS += $(VENDOR_HDF_DRIVERS_ROOT)/led
复制代码 5,修改vendor/huawei/hdf/Kconfig,在最下面增加:
- source "../../vendor/huawei/hdf/led/driver/Kconfig"
复制代码
五、配置驱动编译项
驱动配置包含两部分,HDF框架定义的驱动设备描述和驱动的私有配置信息。
1,驱动设备描述
修改 vendor/hisi/hi35xx/hi3516dv300/config/device_info/device_info.hcs配置文件,在platform::host{}中增加,如下:
- device_led :: device { // led设备节点
- device0 :: deviceNode { // led驱动的DeviceNode节点
- policy = 2; // policy字段是驱动服务发布的策略,在驱动服务管理章节有详细介绍
- priority = 100; // 驱动启动优先级(0-200),值越大优先级越低,建议默认配100,优先级相同则不保证device的加载顺序
- preload = 0; // 驱动按需加载字段
- permission = 0664; // 驱动创建设备节点权限
- moduleName = "led_driver"; // 驱动名称,该字段的值必须和驱动入口结构的moduleName值一致
- serviceName = "led_service"; // 驱动对外发布服务的名称,必须唯一
- deviceMatchAttr = "led_config"; // 驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等
- }
- }
复制代码 2,驱动私有配置信息
在vendor/hisi/hi35xx/hi3516dv300/config/目录下创建led目录,然后新建led_config.hcs文件,内容如下:
- root {
- LedDriverConfig {
- led_version = 1;
- match_attr = "led_config"; //该字段的值必须和device_info.hcs中的deviceMatchAttr值一致
- }
- }
复制代码 修改vendor/hisi/hi35xx/hi3516dv300/config/hdf.hcs文件,添加代码:
- #include "led/led_config.hcs"
复制代码
六、编写用户态应用代码
1,在applications/sample/camera目录创建自己的应用目录myapp,在myapp下创建my_led_app.c应用文件,具体内容见附件。
2,修改drivers/hdf/lite/manager/BUILD.gn文件如下:
- lite_component("hdf_manager") {
- features = [
- ":hdf_core",
- ":led_app",
- ]
- }
- executable("led_app") {
- sources = [
- "//applications/sample/camera/myapp/my_led_app.c"
-
- ]
- include_dirs = [
- "../adapter/syscall/include",
- "../adapter/vnode/include",
- "$HDF_FRAMEWORKS/ability/***uf/include",
- "$HDF_FRAMEWORKS/core/shared/include",
- "$HDF_FRAMEWORKS/core/host/include",
- "$HDF_FRAMEWORKS/core/master/include",
- "$HDF_FRAMEWORKS/include/core",
- "$HDF_FRAMEWORKS/include/utils",
- "$HDF_FRAMEWORKS/utils/include",
- "$HDF_FRAMEWORKS/include/osal",
- "//third_party/bounds_checking_function/include",
- ]
-
- deps = [
- "//drivers/hdf/lite/manager:hdf_core",
- "//drivers/hdf/lite/adapter/osal/posix:hdf_posix_osal",
- ]
- public_deps = [
- "//third_party/bounds_checking_function:libsec_shared",
- ]
- defines = [
- "__USER__",
- ]
- cflags = [
- "-Wall",
- "-Wextra",
- "-Werror",
- ]
- }
复制代码 七、编译运行
#python build.py ipcamera_hi3516dv300 -b debug
使用以上命令编译完成后,烧录开发板,即可看到绿色LED将进行闪烁。
说明:
AI Camera开发板的编译和烧录方法,请参考前面的文章。
https://bbs.elecfans.com/jishu_2034708_1_1.html
https://bbs.elecfans.com/jishu_2041902_1_1.html
`[attach]1011041[/attach]