ohos_bundles/hdf
2020-09-10 10:22:30 +08:00
..
bundle.json add OpenHarmony 1.0 baseline 2020-09-10 10:22:30 +08:00
LICENSE add OpenHarmony 1.0 baseline 2020-09-10 10:22:30 +08:00
README.md add OpenHarmony 1.0 baseline 2020-09-10 10:22:30 +08:00

驱动子系统

简介

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

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

  • 弹性化的框架能力:

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

  • 规范化的驱动接口:

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

  • 组件化的驱动模型:

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

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

  • 归一化的配置界面:

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

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

架构

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

图 1 驱动和框架交互流程

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

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

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

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

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

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

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

目录

表 1 OpenHarmony驱动框架源代码目录结构

名称

描述

hdf

OpenHarmony驱动框架。

hdf\frameworks

完成驱动框架、驱动模型和能力模型库相关代码。

hdf\frameworks\ability

提供驱动开发的功能能力支持,如消息模型库等。

hdf\frameworks\core

实现OpenHarmony驱动框架的核心代码部分。

hdf\frameworks\core\host

提供驱动宿主环境框架功能,主要包含:

1、驱动加载、启动以及对外发布设备节点功能。

2、提供驱动事件分发。

3、驱动内部电源状态管理功能。

4、提供公共的驱动资源配置管理。

hdf\frameworks\core\manager

驱动框架管理模块主要包含:

1、驱动对外服务接口管理。

2、驱动设备信息配置管理。

3、驱动设备节点管理。

4、安全管理模块。

5、驱动故障恢复管理功能模块。

hdf\frameworks\core\shared

提供host和manager共享模块代码。

hdf\frameworks\model

提供驱动通用框架模型。

hdf\frameworks\model\network

提供驱动网络设备模型。

hdf\frameworks\support\

提供驱动使用的系统接口资源和硬件资源如GPIO、I2C、SPI等通用平台接口能力。

该接口部分与平台无关可支持跨平台迁移。

hdf\frameworks\support\osal

提供通用平台适配接口,如内存、线程、锁等资源。

hdf\frameworks\support\platform

提供通用平台硬件资源支撑接口如GPIO、I2C、SPI等能力。

hdf\frameworks\tools

提供驱动功能能力库如HCS驱动配置编译工具等。

hdf\frameworks\utils

提供基础数据结构和算法等。

hdf\lite\adapter

实现对内核操作接口适配,提供抽象化的接口供开发者使用。

hdf\lite\include

提供OpenHarmony驱动框架面向轻量化设备开放的驱动接口接口。

hdf\lite\hdi

提供OpenHarmony驱动程序接口。

约束

无。

使用

图 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 and device service to device object.
    //And you can also initialize device resources here.
    return HDF_SUCCESS;
}

Init接口描述当框架完成设备绑定动作后就开始调用驱动初始化接口当初始化成功后驱动框架根据配置文件决定是否对外创建设备服务

接口还是只是对当前服务接口可见。如果Init初始化失败的话驱动框架就会主动释放创建的设备接口等信息。

int32_t SampleDriverInit(struct HdfDeviceObject *deviceObject)
{
    return HDF_SUCCESS;
}

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

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

安装

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

图 3 驱动安装部署图

涉及仓

drivers_hdf_frameworks

drivers_hdf_lite