0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【OpenHarmony技术峰会】生态与互联分论坛 | 梁开祝:OpenHarmony驱动开发实践

HiHope社区官方号 2023-03-28 16:54 次阅读

在2月25日刚刚圆满闭幕的首届开放原子开源基金会OpenHarmony技术峰会(2023)生态与互联分论坛上,润和软件旗下子公司江苏润开鸿数字科技有限公司(简称:润开鸿)资深软件开发工程师梁开祝发表了题为《OpenHarmony的驱动框架原理和实践》的主题演讲,从实践角度重点讲解了OpenHarmony驱动框架的具体实现细节和“一次开发,多系统部署”的驱动开发实践,帮助OpenHarmony设备驱动开发者深入理解驱动框架工作流程和工作细节。

70e87e16-cd37-11ed-ad0d-dac502259ad0.jpg

技术背景

OpenHarmony引入全新驱动开发理念和框架

7108c342-cd37-11ed-ad0d-dac502259ad0.png

OpenHarmony是一个面向万物互联/万物智联大场景的分布式操作系统,它面对的是硬件性能和功能需求千差万别的设备,比如智能手环与手机之间的硬件差异。为了统一适配能力差别巨大的设备,OpenHarmony设计了一个多内核的架构,能力弱的设备选用简单的内核(如LiteOS)、能力强的设备选用复杂的内核(如Linux),这意味着生态圈中的硬件产品在系统内核层面上就存在巨大的差异。然而这些产品很有可能会用到相近甚至相同的外围硬件,比如,家里的智能门禁系统、智能电视、平板电脑、手机上所使用的摄像头模组都可能是同一个型号或同系列的,而在设备端运行不同内核的操作系统,就需要为不同内核开发各自的驱动程序,这会造成驱动程序的复用性、可移植性、可维护性较差,不利于产品开发和维护,也不利于硬件生态圈的成长。

作为一个全新的操作系统,OpenHarmony必须要开发一套更优秀的驱动开发框架,帮助开发者、企业更便捷地开发和管理硬件设备的驱动程序,助力打造自己的硬件生态。OpenHarmony的驱动框架,采用C语言面向对象编程模型构建,通过平台解耦、内核解耦,来达到兼容不同内核,统一平台底座的目的,从而帮助开发者实现驱动一次开发,多系统部署的效果。

7124153e-cd37-11ed-ad0d-dac502259ad0.png

OpenHarmony的内核子系统(多内核)与驱动子系统(统一的驱动框架)是松耦合的关系,仅通过一个OSAL(Operating System Abstraction Layer,操作系统抽象层)进行交互。OSAL只为驱动框架提供内核部分关键能力的抽象接口,而隐藏了接口在不同内核中的实现细节。驱动框架通过OSAL来适配不同的内核,而具体的设备则完全基于驱动框架提供的能力来实现驱动程序并通过HDI(Hardware Driver Interface,硬件驱动接口)对上层提供驱动服务,设备驱动完全不需要知道(也不会知道)自己运行在什么样的内核之上。

技术干货

OpenHarmony中的驱动框架实现详解

代码结构

712dfdb0-cd37-11ed-ad0d-dac502259ad0.png

图为OpenHarmony的驱动框架以及与驱动开发相关代码部署。驱动框架主要在//drivers/hdf_core/目录下实现。

lframework/目录是C语言实现的驱动框架核心源代码(包括驱动框架、配置管理、配置解析、驱动通用模型、硬件通用平台能力接口等),

注意点:这里的部分代码是内核态驱动框架与用户态驱动框架共用的,需要大家在阅读代码时区分清楚;

l adapter/目录下是驱动框架适配不同内核的适配代码和编译脚本,也包括用户态驱动框架适配不同系统类型(轻量系统和标准系统)的适配代码和编译脚本。

l //drivers/peripheral/目录下是部署在OpenHarmony用户空间的各种外围设备驱动相关的HDI、HAL、驱动模型及测试用例等的实现代码和编译配置。

l //drivers/interface/目录下是用于管理各驱动模块的HDI接口定义,这些接口定义使用IDL语言描述并以.idl文件形式保存。

l 其他与驱动开发相关的代码目录还包括//device/目录和//vendor/目录下的相关部分目录,它们是具体的芯片方案、产品方案、产品定义、产品配置等相关信息和适配代码的汇总,为设备驱动的实现提供一定的支持。

编译与链接

驱动框架适配不同内核的编译配置,在代码结构的//drivers/hdf_core/adapter/目录下,主要还是通过对应的BUILD.gn和Makefile文件将相关的源代码进行串联和依赖,以完成驱动框架整体的编译与链接。

对于不同的内核,则在对应内核的编译脚本中加入编译驱动框架的入口和链接描述。

715195a4-cd37-11ed-ad0d-dac502259ad0.png

图中代码示例是在LiteOS_A内核的编译脚本中include驱动框架的编译入口,同时也在链接脚本中加入一个hdf.driver的只读数据段,用以描述驱动框架专用的数据结构。

715f42f8-cd37-11ed-ad0d-dac502259ad0.png

图中代码示例是在Linux内核的编译脚本中,将驱动框架的关键代码以patch的形式打入Linux源代码中(实际仍是代码目录的软链接形式加入Linux内核中),同时也在链接脚本vmlinux.lds.S中加入一个hdf.driver的只读数据段,用以描述驱动框架专用的数据结构。

当编译到OpenHarmony内核时,编译工具链通过上述脚本的描述一并将驱动框架编译成中间文件,然后链接和打包到内核镜像中使用。

内核态驱动框架及用户态驱动框架启动流程

内核态驱动框架的启动流程

718e6bd2-cd37-11ed-ad0d-dac502259ad0.png

如图所示,部署在内核态的驱动框架作为一个相对独立的部分,要么因为内核(LiteOS_A内核)的其他模块的直接调用而启动,要么作为内核(Linux内核)的一个模块(module)而自动加载和启动。在进入驱动框架的启动入口之后,驱动框架就会进入一个与内核无关的工作流程中(与内核相关部分会通过OSAL接口对接到内核提供的功能)。

用户态驱动框架的启动流程

71a5eeb0-cd37-11ed-ad0d-dac502259ad0.png

如图所示,部署在用户态的驱动框架则分为若干个独立的服务进程,在系统启动到用户态阶段时,由Init进程根据启动配置文件的描述逐一拉起,各进程之间通过IPC进行交互并逐步建立起各自的数据结构关系。

以上两张示意图均为以功能模块划分的启动流程概略图,梁开祝老师在阅读理解OpenHarmony驱动框架的代码时,以API为粒度整理了一份详细的启动流程图,以及在驱动框架启动过程中一步步建立起来的数据结构关系图,感兴趣的读者可到资源仓库下载、阅读。

用户态与内核态的交互

71d16d42-cd37-11ed-ad0d-dac502259ad0.png

内核态的驱动框架与用户态的驱动框架是各自独立的两部分,内核态驱动框架直接管理具体硬件设备的驱动,并以服务的形式向用户态提供服务接口,而用户态驱动框架则通过HDI接口使用内核态驱动框架提供的驱动服务。

HDI接口使用IO Service和IO Dispatcher机制为驱动框架提供进行统一的交互接口,其实现主要有两种形式:

l 当驱动以内核态组件形式部署时,客户端程序需要通过系统调用(system call)方式访问驱动程序。驱动接口通过IO Service请求将消息通过系统调用陷入内核,并将消息分发到IO Dispatcher进行处理。

l 当驱动以用户态服务形式部署时,客户端进程需要通过IPC方式访问驱动服务进程,IO Service完成IPC 通信的客户端消息请求封装,IO Dispatcher完成驱动服务端消息请求封装,客户端消息通过IPC送达服务端再分发给IO Dispatcher处理。

注意点:该交互过程涉及比较复杂的数据处理流程,需要结合代码进行深入理解。

通用的驱动示例程序

以一个通用的驱动示例程序来简单验证基于OpenHarmony驱动框架的设备驱动开发基本要点。

71f71d30-cd37-11ed-ad0d-dac502259ad0.png

本驱动示例程序,包含了驱动框架的一些基本要素,如上层的应用程序、内核的驱动程序、硬件的驱动配置信息、适配不同内核和不同类型系统的编译脚本等。小伙伴们可以跟着里面的README文档的操作说明,从简单到复杂一步步去验证前文提到的驱动框架知识要点,也可以非常方便地将这个示例程序移植到不同的开发板上进行验证,以此体验OpenHarmony驱动框架“一次开发,多系统部署”的好处。

“以技术赋能开源共建,持续发挥生态引领作用”。润和软件将深入贯彻“2+N”行业战略(深耕金融、能源“2”大行业,广泛赋能智慧城市、医疗、教育、工业等“N”个行业),围绕行业场景落地不断夯实软硬件底座,推动应用创新,助力体验提升;吸引更多企业及个人开发者融入生态、参与共建,持续为OpenHarmony繁荣发展贡献力量。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动
    +关注

    关注

    12

    文章

    1829

    浏览量

    85213
  • OpenHarmony
    +关注

    关注

    25

    文章

    3682

    浏览量

    16183
收藏 人收藏

    评论

    相关推荐

    OpenHarmony人才生态大会南向生态社区发展论坛在武汉圆满举办

    11月27日,OpenHarmony人才生态大会2024在武汉隆重举行。当日下午的 OpenHarmony南向生态社区发展论坛(以下简称“
    的头像 发表于 11-29 10:06 126次阅读
    <b class='flag-5'>OpenHarmony</b>人才<b class='flag-5'>生态</b>大会南向<b class='flag-5'>生态</b>社区发展<b class='flag-5'>论坛</b>在武汉圆满举办

    OpenHarmony人才生态大会南向生态社区发展论坛在武汉圆满举办

    11月27日,OpenHarmony人才生态大会2024在武汉隆重举行。当日下午的 OpenHarmony南向生态社区发展论坛(以下简称“
    发表于 11-29 09:54

    鸿亮相OpenHarmony人才生态大会,打造人才生态“强引擎”

    11月27日,OpenHarmony人才生态大会2024(以下简称“大会”)在武汉隆重举行。本次大会设立主题演讲及多场教育论坛、南向社区论坛、外设
    的头像 发表于 11-28 01:03 137次阅读
    深<b class='flag-5'>开</b>鸿亮相<b class='flag-5'>OpenHarmony</b>人才<b class='flag-5'>生态</b>大会,打造人才<b class='flag-5'>生态</b>“强引擎”

    鸿亮相第三届OpenHarmony技术大会,以技术驱动OpenHarmony生态发展

    10月12-13日,第三届OpenHarmony技术大会(以下简称“大会”)在上海顺利举行。本届大会以“技术引领筑生态,万物智联创未来”为主题,设置1场主
    的头像 发表于 10-15 08:07 430次阅读
    深<b class='flag-5'>开</b>鸿亮相第三届<b class='flag-5'>OpenHarmony</b><b class='flag-5'>技术</b>大会,以<b class='flag-5'>技术</b><b class='flag-5'>驱动</b><b class='flag-5'>OpenHarmony</b><b class='flag-5'>生态</b>发展

    第三届OpenHarmony技术大会在上海成功举办

    了来自全球的开源操作系统技术精英、前沿实践专家、广大开发者以及学术界大咖,面向全球展示了OpenHarmony的最新技术
    发表于 10-13 11:14

    九联鸿闪耀HDC2024,展示OpenHarmony生态创新

    的最新进展以及OpenHarmony原生应用的开发实践。作为华为OpenHarmony使能伙伴以及开放原子开源基金会OpenHarmony
    的头像 发表于 06-24 10:15 1084次阅读

    鸿智谷与OpenHarmony的创新对话

    OpenHarmony4.1Release版本根技术特性解读为契机,聚集广大开发者、生态伙伴、行业领袖与百位技术专家共同讨论
    的头像 发表于 05-29 08:30 456次阅读
    <b class='flag-5'>开</b>鸿智谷与<b class='flag-5'>OpenHarmony</b>的创新对话

    报名开启!第二届OpenHarmony开发者大会2024重磅来袭!

    OpenHarmony 开发者大会2024,为开发者、产业组织、生态伙伴和行业用户搭建一个交流、分享和学习的平台。大会以 OpenHarmony
    发表于 05-14 15:23

    OpenHarmony社区运营报告(2023年12月)

    隆重举行。作为开放原子开发者大会最重要的技术论坛之一,此次论坛不仅展示了 2023 年 OpenHar
    发表于 01-10 15:44

    技术创新,照见未来 | 2023 开放原子开发者大会 OpenHarmony 论坛圆满举行

    OpenHarmony 论坛(以下简称“论坛”)在无锡隆重举行。作为开放原子开发者大会最重要的技术
    的头像 发表于 12-22 09:58 448次阅读
    <b class='flag-5'>技术</b>创新,照见未来 | 2023 开放原子<b class='flag-5'>开发</b>者大会 <b class='flag-5'>OpenHarmony</b> <b class='flag-5'>分</b><b class='flag-5'>论坛</b>圆满举行

    赋能行业,共赢未来:2023开源产业生态大会OpenHarmony生态论坛成功举办

    信息技术协会统筹主办的2023开源产业生态大会在上海开幕。华为携手OpenAtom OpenHarmony(以下简称“OpenHarmony”)项目群
    的头像 发表于 12-21 21:15 508次阅读

    鸿AT32开发平台通过OpenHarmony兼容性测评

    Release版本兼容性测评,助力润鸿基于该开发平台全新研发推出的行业终端设备顺利融入OpenHarmony生态,也为OpenHarmony
    发表于 12-21 17:20

    鸿AT32开发平台通过OpenHarmony兼容性测评

    OpenHarmony(以下简称"OpenHarmony")3.2. Release版本兼容性测评,助力润鸿基于该开发平台全新研发推出的行业终端设备顺利融入
    的头像 发表于 12-20 21:10 669次阅读
    润<b class='flag-5'>开</b>鸿AT32<b class='flag-5'>开发</b>平台通过<b class='flag-5'>OpenHarmony</b>兼容性测评

    技术创新,照见未来 | 2023开放原子开发者大会OpenHarmony论坛圆满举行

    OpenHarmony论坛(以下简称“论坛”)在无锡隆重举行。作为开放原子开发者大会最重要的技术
    的头像 发表于 12-18 15:55 455次阅读

    精彩预告 | 首届开放原子开发者大会OpenHarmony论坛议程抢鲜看

    现。如何更好地让技术创新的汗水,滋养进未来世界的商业项目中,是所有开发者和开源企业需要思考的问题。   2023开放原子开发者大会的OpenHarmony
    的头像 发表于 12-15 16:15 335次阅读