鸿蒙开发学习:【驱动子系统】

OpenHarmony驱动子系统采用C面向对象编程模型构建,通过平台解耦、内核解耦,兼容不同内核,提供了归一化的驱动平台底座,旨在为开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。

为了缩减驱动开发者的驱动开发周期,降低三方设备驱动集成难度,OpenHarmony驱动子系统支持以下关键特性和能力。

  • 弹性化的框架能力:

    在传统的驱动框架能力的基础上,OpenHarmony驱动子系统通过构建弹性化的框架能力,可支持在百K级别到百兆级容量的终端产品形态部署。

  • 规范化的驱动接口:

    定义了常见驱动接口,为驱动开发者和使用者提供丰富、稳定接口,并和未来开放的面向手机、平板、智慧屏等设备驱动接口保持API兼容性。

  • 组件化的驱动模型:

    支持组件化的驱动模型,为开发者提供更精细化的驱动管理,开发者可以对驱动进行组件化拆分,使得驱动开发者可以更多关注驱动与硬件交互部分。

    同时系统也预置了部分模板化的驱动模型组件,如网络设备模型等。

  • 归一化的配置界面:

    提供统一的配置界面,构建跨平台的配置转换和生成工具,实现跨平台的无缝切换

为了方便驱动开发者更易于开发OpenHarmony驱动程序,OpenHarmony驱动子系统在DevEco集成了驱动开发套件工具,支持驱动工程管理,驱动模板生成、配置管理等界面化的操作。

架构

OpenHarmony驱动框架采用主从架构设计模式,围绕着框架、模型、能力库和工具四个维度能力展开构建。

图 1 驱动架构图

  • 驱动框架 -位于framework/core目录

    • 提供驱动框架能力,主要完成驱动加载和启动功能。
    • 通过对象管理器方式可实现驱动框架的弹性化部署和扩展。
  • 驱动模型 - 位于framework/model目录

    • 提供了模型化驱动能力,如网络设备模型。
  • 驱动能力库 - 位于framework/ability目录

    • 提供基础驱动能力模型,如IO通信能力模型。
  • 驱动工具 - 位于framework/tools目录

    • 提供HDI接口转换、驱动配置编译等工具。
  • 驱动接口 - 位于lite/hdi目录

    • 提供规范化的驱动接口。
  • Support - 位于framework/support目录

    • 提供规范化的平台驱动接口和系统接口抽象能力。

使用

图 2 驱动框架交互流程

驱动框架完成大部分驱动加载的动作,用户只需注册自己所需的接口和配置,然后驱动框架就会解析配置的内容,完成驱动加载和初始化动作。

开发者基于HDF驱动框架开发的驱动主要包含三大部分:

1、驱动程序部分 - 完成驱动的功能逻辑。

2、驱动配置信息 - 指示驱动的加载信息内容。

3、驱动资源配置 - 配置驱动的硬件配置信息。

驱动程序主要是完成驱动功能的开发部分:

对于开发者首先看到的是驱动入口部分,驱动入口部分通过DriverEntry对其进行描述。

其中主要包含bind, init 和release三个接口。

struct HdfDriverEntry g_deviceSample = {
    .moduleVersion = 1,
    .moduleName = "sample_driver", 
    .Bind = SampleDriverBind,
    .Init = SampleDriverInit,
    .Release = SampleDriverRelease,
};

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

int32_t SampleDriverBind(struct HdfDeviceObject *deviceObject)
{
    // TODO: Bind device service to device object.
    // And you can also initialize device resources here.
    return HDF_SUCCESS;
}

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

int32_t SampleDriverInit(struct HdfDeviceObject *deviceObject)
{
    // TODO: Init hardware or other resources here.
    return HDF_SUCCESS;
}

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

void SampleDriverRelease(struct HdfDeviceObject *deviceObject)
{
    // Release all resources.
    return;
}

安装

OpenHarmony驱动主要部署在内核态,当前主要采用静态链接方式,随内核子系统编译和系统镜像打包。

更多鸿蒙知识已经打包好了qr23.cn/AKFP8k可以前往了解

图 3 驱动安装部署图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/466330.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

避雷!又新增一本SCI被标记On Hold,共16本!

毕业推荐 IEEE(CCF-C类) • 计算机医学类,7.5-8.0,JCR1区,中科院2/1区(TOP) • 3-4个月左右录用 SCIE: • 计算机类,6.5-7.0,JCR1区,中科院2…

关于udp能跨局域网传输的问题

UDP(用户数据报协议)以其独特的传输特性在多种应用场景中都有着极其重要的作用。然而,关于UDP是否能跨局域网(LAN)进行传输,以及这一传输过程中的优缺点,一直是网络技术领域讨论的热点。本文将详…

气液分离器的概念和原理

气液分离器也叫低压储液器,在热泵或制冷系统中使用,主要是将出蒸发器、进压缩机气流中的液滴分离出来,防止压缩机发生液击,用于工质充注量较大、压缩机进气可能带液且压缩机对湿压缩较敏感的情况 。 液击主要出现在活塞式压缩机中…

JSON 的了解和使用

目录 1. JSON 2. JSONcpp 的安装 3. JSONcpp 相关API的使用 3.1. 将 Json::Value 对象转化为 std::string 3.1.1. Json::Value 类 3.1.2. Json::Value::toStyledString 接口 3.1.3. Json::StyledWriter 类 3.1.4. Json::StyledWriter::write 接口 3.1.5. Json::Fas…

git remote Support for password authentication was removed on August 13, 2021

一 问题描述 git push 上报时提示 remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. 原因是:github 从2021年8月13日开始就不能用了,必须使用个人访问令牌(pers…

Midjourney绘图欣赏系列(十三)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

Clickhouse 单机部署安装

前言 在大数据的时代背景下,数据的处理和分析能力成为企业竞争力的关键。ClickHouse,作为一款由俄国Yandex公司开发的分布式数据分析型数据库,凭借其卓越的性能和稳定性,赢得了业界的广泛关注。本文将介绍ClickHouse的基本概念、…

java IO 04 对象处理流,序列化

01.序列化和反序列化的作用 重点: 图: 02.对象流ObjectOutputStream和ObjectInputStream ObjectInputStream: ObjectOutputStream: 例子: 例子: 修改要序列化类的话,会出现不同的uid…

为什么要为 App 应用加固 ?如何为 App 应用加固 ?

一:为什么要为 App 应用加固 来看下 腾讯开放平台 官方的解释说明 若应用不做任何安全防护,极易被病毒植入、广告替换、支付渠道篡改、钓鱼、信息劫持等,严重侵害开发者的利益。 App 加固后,可以对应用进行安全防护,防…

酷开科技以酷开系统的力量让电视机“活”起来

让用户回归电视的绝不会是因为电视机本身,而是电视系统的内容和交互的形式。酷开科技以系统的力量让电视机“活”起来。对于许多人来说,观看电影是一种享受、一种放松、一种逃避现实的方式。而现在,酷开科技作为行业内领军企业,为…

Echarts横向柱形图

项目原型图如下: 实际上就是设置两个y轴,第一个显示底色柱子,另一个只显示真实数据的柱子,在这里只显示y轴,x轴不显示.. this.middleLeftOption {tooltip: {trigger: axis,axisPointer: {}},legend: {data: [回退次数],y: bottom},grid: {left: 3%,righ…

你清楚微信加好友的规则吗?

微信加人的规则是: 1、通过附近人功能加人上限15人/天,频率3次/天,间隔时间1-2小时; 2、通过摇一摇功能加人上限15人/天,频率3次/天,间隔时间1-2小时; 3、通过通讯录搜索功能加人上限6人/单次…

【大模型】直接在VS Code(Visual Studio Code)上安装CodeGeeX插件的过程

文章目录 一、什么是CodeGeeX(一)我理解的CodeGeeX(二)优缺点 二、CodeGeex下载、安装、注册(一)安装VS Code(Visual Studio Code)(二)下载安装CodeGeeX(三)注…

泰迪智能科技携手华北电力大学理学院共建“校外实践基地”

3月15日,华北电力大学数理学院教学副主任史会峰、科研副主任王涛、概率教研室副主任解西阳莅临泰迪智能科技产教融合实训基地开展“华北电力大学校外实践教学基地”签约揭牌仪式。泰迪智能科技董事长张良均、支持中心负责人王宏刚、外联部吴桂锋进行接待。 活动伊始…

动手学深度学习9 多层感知机+代码实现

多层感知机代码实现 1. 感知机2. 多层感知机单隐藏层三个激活函数多隐藏层 3. 代码实现从零开始实现简洁实现注意 4. QA 1. 感知机 视频:https://www.bilibili.com/video/BV1hh411U7gn/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 书&am…

如何修改Notes Domino中的默认通讯端口

大家好,才是真的好。 不知道有多少人知道,Notes客户机和Domino服务器之间默认的通讯协议叫做NRPC,很多人就直接称之为Notes协议,Notes和Domino服务器之间的数据通信,都是采用安全的NRPC协议,采用的端口默认…

EMQX 4.0和EMQX 5.0集群架构实现1亿MQTT连接哪些改进

EMQX 5.0水平扩展能力得到了指数级提升,能够更可靠地承载更大规模的物联网设备连接量。 在EMQX5.0正式发布前的性能测试中,我们通过一个23节点的EMQX集群,全球首个达成了1亿MQTT连接每秒100万消息吞吐,这也使得EMQX 5.0成为目前为…

echarts实践总结(常用一):柱状图(特点:渐变色、点击缩放、左右滑动、悬浮展示样式)

目录 第一章 echarts基本使用 第二章 echarts实践——柱状图 效果展示 第一章 echarts基本使用 Echarts常用配置项(详细入门)_echarts配置项手册-CSDN博客 第二章 echarts实践——柱状图 最近接到这么一个需求,需要画页面,然后有这么几个echarts的图需…

25双体系Java学习之StringBuffer和StringBuilder

StringBuffer和StringBuilder ★小贴士 String str new String("welcome to "); str "here"; 字符串的拼接过程实际上是通过建立一个StringBuffer,然后调用StringBuffer的append方法,最后再将StringBuffer转为字符串&#xff0c…

【网络安全】0xhacked CTF 大赛题解出炉啦!

此次 0xhacked CTF 比赛,ChainSecLabs 取得了第四名的成绩。让我们来看看比赛题目的题解吧。(题目代码仓库在文末哦~) BabyOtter 这是应该说是一个算法题,很明显需要溢出,因为精度问题,uint256(-1)/0x1…