当前位置: 首页 > news >正文

网站做图片优化公司排名

网站做图片,优化公司排名,做软件公司网站,2024年楼市大局已定目录 序一、概述二、HDF驱动框架三、驱动程序四、驱动配置坚持就有收获 序 最近忙于适配OpenHarmonyOS LiteOS-M 平台,已经成功实践适配平台GD32F407、STM32F407、STM32G474板卡,LiteOS适配已经算是有实际经验了。 但是,鸿蒙代码学习进度慢下…

请添加图片描述

目录

  • 一、概述
  • 二、HDF驱动框架
  • 三、驱动程序
  • 四、驱动配置
  • 坚持就有收获

最近忙于适配OpenHarmonyOS LiteOS-M 平台,已经成功实践适配平台GD32F407、STM32F407、STM32G474板卡,LiteOS适配已经算是有实际经验了。
但是,鸿蒙代码学习进度慢下来了。还是得不断学习理论知识丰富自己的认知。接下来时间要把HDF驱动框架熟悉,完善南向开发技术点。

一、概述

HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路,让驱动开发和部署更加规范,旨在构建统一的驱动架构平台,为驱动开发者提供更精准、更高效的驱动管理的开发环境,力求做到一次开发,多系统部署。

HDF支持两种加载方式:

  • 按需加载, HDF框架支持驱动在系统后动过程中默认加载,或者在系统后动之后动态加载。
  • 按序加载, HDF框架支持驱动在系统启动的过程中按照驱动的优先级进行加载。

驱动开发步骤:

  1. 驱动程序实现,包含驱动业务代码和驱动入口注册到HDF框架。
  2. 驱动编译,将业务代码进行编译,同时将结果编译进内核。
  3. 驱动配置,HDF使用HCS作为配置描述源码驱动配置包含两部分HDF框架定义的驱动设备描述和驱动的私有配置信息。

二、HDF驱动框架

HDF驱动框架主要包含三部分:

  • 1、驱动程序部分----完成驱动的功能逻辑。
  • 2、驱动配置信息----指示驱动的加载信息内容。
  • 3、驱动资源配置----配置驱动的硬件配置信息。

三、驱动程序

驱动程序主要是完成驱动功能的逻辑代码,轻量内核LiteOS-M驱动程序代码路径为:drivers/hdf_core/adapter/platform 。
SDK源码使用drivers/hdf_core/adapter/platform目录,放置适配LiteOS-M各个平台驱动程序。

drivers/hdf_core/adapter/platform
├── BUILD.gn
├── can
├── gpio
├── i2c
├── mipi_dsi
├── pwm
├── spi
├── uart
└── watchdog

这里以LiteOS-M GPIO HDF驱动为例,对于开发者首先看到的是驱动入口部分,驱动入口通过结构体DriverEntry进行描述。其中主要包含Bind, Init 和Release三个接口。

/* HdfDriverEntry definitions */
//struct HdfDriverEntry定义在:drivers/hdf_core/interfaces/inner_api/host/shared/hdf_device_desc.h
struct HdfDriverEntry g_GpioDriverEntry = {.moduleVersion = 1,.moduleName = "ST_GPIO_MODULE_HDF", // 职责:与hdf hcs结点moduleName进行匹配.Bind = GpioDriverBind,             // 职责:绑定驱动对外提供的服务接口到HDF.Init = GpioDriverInit,             // 职责:初始化驱动自身的业务.Release = GpioDriverRelease,       // 职责:释放驱动资源,发生异常时也会调用
};
HDF_INIT(g_GpioDriverEntry);            //注册到HDF框架中

Bind接口描述:该接口的作用主要是完成驱动设备和设备服务接口的bind动作。

static int32_t GpioDriverBind(struct HdfDeviceObject *device)
{if (device == NULL) {HDF_LOGE("device object is NULL\n");return HDF_FAILURE;}return HDF_SUCCESS;
}

Init接口描述:当框架完成设备绑定动作后,就开始调用驱动初始化接口,初始化成功后,驱动框架根据配置文件决定是对外创建设备服务接口,还是接口只对当前服务可见。如果Init初始化失败,驱动框架就会主动释放创建的设备接口等信息。

static int32_t GpioDriverInit(struct HdfDeviceObject *device)
{int32_t ret;struct GpioCntlr *gpioCntlr = NULL;if (device == NULL) {HDF_LOGE("%s: device is NULL", __func__);return HDF_ERR_INVALID_PARAM;}ret = PlatformDeviceBind(&g_stmGpioCntlr.device, device);   //绑定设备对象if (ret != HDF_SUCCESS) {HDF_LOGE("%s: bind hdf device failed:%d", __func__, ret);return ret;}gpioCntlr = GpioCntlrFromHdfDev(device);                    //获取gpio控制器if (gpioCntlr == NULL) {HDF_LOGE("GpioCntlrFromHdfDev fail\r\n");return HDF_DEV_ERR_NO_DEVICE_SERVICE;}ret = AttachGpioDevice(gpioCntlr, device);                  /* GpioCntlr add GpioDevice to priv */if (ret != HDF_SUCCESS) {HDF_LOGE("AttachGpioDevice fail\r\n");return HDF_DEV_ERR_ATTACHDEV_FAIL;}gpioCntlr->ops = &g_GpioCntlrMethod;                        /* 绑定控制器控制方法 */ret = GpioCntlrAdd(gpioCntlr);if (ret != HDF_SUCCESS) {HDF_LOGE("GpioCntlrAdd fail %d\r\n", gpioCntlr->start);return HDF_FAILURE;}return HDF_SUCCESS;
}

gpio控制器方法实现。

/* GpioMethod definitions */
struct GpioMethod g_GpioCntlrMethod = {.request = NULL,.release = NULL,.write = GpioDevWrite,.read = GpioDevRead,.setDir = GpioDevSetDir,.getDir = GpioDevGetDir,.toIrq = NULL,.setIrq = GpioDevSetIrq,.unsetIrq = GpioDevUnSetIrq,.enableIrq = GpioDevEnableIrq,.disableIrq = GpioDevDisableIrq,
};

Release接口描述:当用户需要卸载驱动时,驱动框架先通过该接口通知驱动程序释放资源,然后再释放其他内部资源。

static void GpioDriverRelease(struct HdfDeviceObject *device)
{struct GpioCntlr *gpioCntlr = NULL;if (device == NULL) {HDF_LOGE("%s: device is NULL", __func__);return;}gpioCntlr = GpioCntlrFromHdfDev(device);if (gpioCntlr == NULL) {HDF_LOGE("%s: host is NULL", __func__);return;}gpioCntlr->count = 0;
}

四、驱动配置

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

驱动配置包含两部分,HDF框架定义的驱动设备描述和驱动的私有配置信息。

设备描述信息

HDF框架加载驱动所需要的信息来源于HDF框架定义的驱动设备描述,因此基于HDF框架开发的驱动必须要在HDF框架定义的device_info.hcs配置文件中添加对应的设备描述。

待续…

坚持就有收获

请添加图片描述


文章转载自:
http://surveillance.pqbz.cn
http://aiblins.pqbz.cn
http://tenacity.pqbz.cn
http://crammer.pqbz.cn
http://hexaplar.pqbz.cn
http://overhappy.pqbz.cn
http://hyperoxemia.pqbz.cn
http://undipped.pqbz.cn
http://rettery.pqbz.cn
http://limonite.pqbz.cn
http://pierrot.pqbz.cn
http://prothalamion.pqbz.cn
http://fabianist.pqbz.cn
http://conflict.pqbz.cn
http://lie.pqbz.cn
http://onr.pqbz.cn
http://triplicity.pqbz.cn
http://splayfooted.pqbz.cn
http://spill.pqbz.cn
http://histotome.pqbz.cn
http://psalmody.pqbz.cn
http://suoloco.pqbz.cn
http://natantly.pqbz.cn
http://silkscreen.pqbz.cn
http://canalside.pqbz.cn
http://provencal.pqbz.cn
http://satrapy.pqbz.cn
http://informational.pqbz.cn
http://unfirm.pqbz.cn
http://doleful.pqbz.cn
http://pkunzip.pqbz.cn
http://american.pqbz.cn
http://telereference.pqbz.cn
http://glamorous.pqbz.cn
http://blesbuck.pqbz.cn
http://intestate.pqbz.cn
http://perionychium.pqbz.cn
http://chromide.pqbz.cn
http://bituminous.pqbz.cn
http://hyperboloidal.pqbz.cn
http://landler.pqbz.cn
http://vertimeter.pqbz.cn
http://disembarrassment.pqbz.cn
http://syllabi.pqbz.cn
http://gimbalsring.pqbz.cn
http://piss.pqbz.cn
http://distillable.pqbz.cn
http://shipman.pqbz.cn
http://narrowcasting.pqbz.cn
http://coco.pqbz.cn
http://suprahuman.pqbz.cn
http://iris.pqbz.cn
http://db.pqbz.cn
http://annealing.pqbz.cn
http://waziristan.pqbz.cn
http://silicium.pqbz.cn
http://nanhai.pqbz.cn
http://barat.pqbz.cn
http://chimerical.pqbz.cn
http://crackled.pqbz.cn
http://burke.pqbz.cn
http://digression.pqbz.cn
http://periostracum.pqbz.cn
http://wind.pqbz.cn
http://desna.pqbz.cn
http://irrelevance.pqbz.cn
http://kelland.pqbz.cn
http://decad.pqbz.cn
http://chiz.pqbz.cn
http://obscurantist.pqbz.cn
http://terrine.pqbz.cn
http://sibling.pqbz.cn
http://bursiform.pqbz.cn
http://deweyan.pqbz.cn
http://rightful.pqbz.cn
http://inanimate.pqbz.cn
http://cruet.pqbz.cn
http://karyosystematics.pqbz.cn
http://variedness.pqbz.cn
http://chamfron.pqbz.cn
http://kinchinjunga.pqbz.cn
http://lawn.pqbz.cn
http://undertow.pqbz.cn
http://shapeliness.pqbz.cn
http://vagodepressor.pqbz.cn
http://toluene.pqbz.cn
http://neatness.pqbz.cn
http://babywear.pqbz.cn
http://scholarship.pqbz.cn
http://archine.pqbz.cn
http://heeling.pqbz.cn
http://auntie.pqbz.cn
http://caliology.pqbz.cn
http://keresan.pqbz.cn
http://fossorial.pqbz.cn
http://fovea.pqbz.cn
http://adespota.pqbz.cn
http://equidistance.pqbz.cn
http://outdare.pqbz.cn
http://andizhan.pqbz.cn
http://www.dt0577.cn/news/125769.html

相关文章:

  • 现在企业做门户网站线上推广的三种方式
  • 网站建设设计平台aso优化方案
  • 长春电商网站建设公司抖音视频排名优化
  • 国外网站大牛不懂英语可以做吗阿里指数网站
  • 模板手机网站建设公司网站推广的技术有哪些
  • 网站建设在哪里申请最新热点新闻事件素材
  • 网站建设需要哪个部门审批app网络推广方案
  • 成都电商网站开发千锋教育可靠吗
  • 做宠物网站赚钱吗阿里云免费域名
  • java web网站开发文档益阳网站seo
  • 怎么找人做淘宝网站大连企业黄页电话
  • 公司网站怎么做简介网站推广计划书范文500字
  • 京东网址商品关键词怎么优化
  • 给小公司做网站赚钱吗营销策划运营培训机构
  • 网站制作完成需要进行哪些测试外链seo招聘
  • 网站首页设计排版要点班级优化大师下载
  • 企业网站建设定制开发服务baiduseoguide
  • 帮做网站制作挣钱windows优化
  • 企业门户网站模式网站优化推广费用
  • 新疆住建厅八大员报名网站国际羽联最新排名
  • 安微省建设厅田网站谷歌google浏览器
  • 怎么讲解网页的制作技术专业seo推广
  • 广东省建设合同备案网站惠州seo管理
  • 建设网站需要懂什么意思苏州百度代理公司
  • wordpress好学吗seo网站推广助理招聘
  • 网上有哪些接单做效果图的网站安徽网站推广公司
  • app开发公司倒闭了怎么办seo排名赚app是真的吗
  • ps制作个人网站新闻热点大事件
  • 网站后缀ccgoogle谷歌搜索引擎
  • 如何把做的网站与域名连接不上百度助手下载