[文章]基于HarmonyOS HDF驱动框架的控制AI Camera 开发板LED闪烁

阅读量0
0
0
`一、前言       本文通过阅读鸿蒙官方文档以及参考论坛其他贡献者经验,熟悉Harmony OS中的HDF驱动框架,进行对AI Camera开发板的GPIO进行控制,来使得开发板上的LED等闪烁。

二、Harmony驱动模型
       HDF框架以组件化的驱动模型作为核心设计思路,为开发者提供更精细化的驱动管理,让驱动开发和部署更加规范。HDF框架将一类设备驱动放在同一个host里面,开发者也可以将驱动功能分层独立开发和部署,支持一个驱动多个node,HDF框架管理驱动模型如下图所示:
HDF.png

图1 HDF框架管理驱动模型


基于HDF框架进行驱动的开发主要分为两个部分,驱动实现驱动配置




三、确定LED硬件IO
       通过查看AI Camera开发板原理图可知,绿灯对应的控制管脚为GPIO2_3,换算成GPIO号为2*8+3=19,如下图所示:
led.png

图2 绿色LED灯硬件管脚



四、编写内核态LED驱动代码
       1,在vendor/huawei/hdf目录下创建led目录;
       2,在led目录中,分别创建led.c驱动文件、Makefile文件和driver目录,具体代码见附件;
       3,在driver目录中,创建Kconfig文件,具体代码见附件;
       4,修改vendor/huawei/hdf/hdf_vendor.mk,在最下面增加:
  1. LITEOS_BASELIB += -lhdf_led_driver
  2. LIB_SUBDIRS    += $(VENDOR_HDF_DRIVERS_ROOT)/led
复制代码
       5,修改vendor/huawei/hdf/Kconfig,在最下面增加:
  1. source "../../vendor/huawei/hdf/led/driver/Kconfig"
复制代码


五、配置驱动编译项
       驱动配置包含两部分,HDF框架定义的驱动设备描述驱动的私有配置信息。
       1,驱动设备描述
       修改 vendor/hisi/hi35xx/hi3516dv300/config/device_info/device_info.hcs配置文件,在platform::host{}中增加,如下:
  1. device_led :: device {                  // led设备节点
  2.         device0 :: deviceNode {             // led驱动的DeviceNode节点
  3.             policy = 2;                     // policy字段是驱动服务发布的策略,在驱动服务管理章节有详细介绍
  4.             priority = 100;                 // 驱动启动优先级(0-200),值越大优先级越低,建议默认配100,优先级相同则不保证device的加载顺序
  5.             preload = 0;                    // 驱动按需加载字段
  6.             permission = 0664;              // 驱动创建设备节点权限
  7.             moduleName = "led_driver";      // 驱动名称,该字段的值必须和驱动入口结构的moduleName值一致
  8.             serviceName = "led_service";    // 驱动对外发布服务的名称,必须唯一
  9.             deviceMatchAttr = "led_config"; // 驱动私有数据匹配的关键字,必须和驱动私有数据配置表中的match_attr值相等
  10.         }
  11.     }
复制代码
        2,驱动私有配置信息
       在vendor/hisi/hi35xx/hi3516dv300/config/目录下创建led目录,然后新建led_config.hcs文件,内容如下:
  1. root {
  2.     LedDriverConfig {
  3.         led_version = 1;
  4.         match_attr = "led_config";   //该字段的值必须和device_info.hcs中的deviceMatchAttr值一致
  5.     }
  6. }
复制代码
       修改vendor/hisi/hi35xx/hi3516dv300/config/hdf.hcs文件,添加代码:
  1. #include "led/led_config.hcs"
复制代码

六、编写用户态应用代码
      1,在applications/sample/camera目录创建自己的应用目录myapp,在myapp下创建my_led_app.c应用文件,具体内容见附件。
      2,修改drivers/hdf/lite/manager/BUILD.gn文件如下:
  1. lite_component("hdf_manager") {
  2.     features = [
  3.         ":hdf_core",
  4.         ":led_app",
  5.     ]
  6. }


  7. executable("led_app") {
  8.     sources = [
  9.         "//applications/sample/camera/myapp/my_led_app.c"
  10.         
  11.     ]

  12.     include_dirs = [
  13.         "../adapter/syscall/include",
  14.         "../adapter/vnode/include",
  15.         "$HDF_FRAMEWORKS/ability/***uf/include",        
  16.         "$HDF_FRAMEWORKS/core/shared/include",
  17.         "$HDF_FRAMEWORKS/core/host/include",
  18.         "$HDF_FRAMEWORKS/core/master/include",
  19.         "$HDF_FRAMEWORKS/include/core",
  20.         "$HDF_FRAMEWORKS/include/utils",
  21.         "$HDF_FRAMEWORKS/utils/include",
  22.         "$HDF_FRAMEWORKS/include/osal",
  23.         "//third_party/bounds_checking_function/include",
  24.     ]
  25.         
  26.     deps = [
  27.         "//drivers/hdf/lite/manager:hdf_core",
  28.         "//drivers/hdf/lite/adapter/osal/posix:hdf_posix_osal",
  29.     ]

  30.     public_deps = [
  31.         "//third_party/bounds_checking_function:libsec_shared",
  32.         ]

  33.     defines = [
  34.         "__USER__",
  35.     ]

  36.     cflags = [
  37.         "-Wall",
  38.         "-Wextra",
  39.         "-Werror",
  40.     ]
  41. }
复制代码
七、编译运行

        #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
led_app.zip
(12.26 KB, 下载次数: 7)














`[attach]1011041[/attach]

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友