百科网

首页 > 科技数码

科技数码

HarmonyOS驱动概述

科技数码佚名2023-02-18

HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理和驱动消息机制。旨在构建统一的驱动架构平台,为驱动开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。

一、HarmonyOS驱动概述

HarmonyOS驱动框架采用C语言面向对象编程模型构建,通过平台解耦、内核解耦,来达到兼容不同内核,统一平台底座的目的,从而帮助开发者实现驱动的“一次开发,多系统部署”。

为了达成这个目标, HarmonyOS驱动框架提供了:

1、操作系统适配层(OSAL,operating system abstraction layer):提供内核操作相关接口进行统一封装,屏蔽不同系统操作接口。

2、平台驱动接口:提供Board部分驱动(例如:I2C/SPI/UART总线等平台资源)支持,同时对Board硬件操作接口进行统一的适配抽象,开发者只需开发新硬件抽象接口,即可获得新增Board部分驱动支持。

3、驱动模型:面向器件驱动,提供常见的驱动抽象模型,主要达成两个目的:

● 提供标准化的器件驱动,开发者无需独立开发,通过配置即可完成驱动的部署。

● 提供驱动模型抽象,屏蔽驱动与不同系统组件间的交互,使得驱动更具备通用性。

为了进一步简化HarmonyOS驱动开发,HarmonyOS驱动框架支持多种驱动加载方式:

● 支持驱动动态加载和静态加载,解除驱动代码和框架间的直接代码依赖,使得驱动程序可以独立编译和部署;

● 支持按需动态加载方式,避免设备驱动全量加载,可有效降低系统资源的占用。

本文主要分析HarmonyOS驱动加载过程,在正式介绍之前,首先了解HarmonyOS驱动架构的组成、工作原理和机制,从而了解驱动加载的细节。

官网相关介绍:https://device.harmonyos.com/cn/docs/develop/drive/oem_drive_hdfdev-0000001051715456

二、HarmonyOS驱动架构介绍

2.1 HarmonyOS驱动架构组成

图1 HarmonyOS驱动架构

HarmonyOS驱动架构主要由HDF驱动框架、驱动程序、驱动配置文件和驱动接口四个部分组成。

1)HDF驱动框架提供统一的硬件资源管理,驱动加载管理以及设备节点管理等功能。

驱动框架采用的是主从模式设计,由Device Manager和Device Host组成。

Device Manager提供了统一的驱动管理,Device Manager启动时根据Device Information提供驱动设备信息加载相应的驱动Device Host,并控制Host完成驱动的加载。

Device Host提供驱动运行的环境,同时预置Host Framework与Device Manager进行协同,完成驱动加载和调用。根据业务的需求Device Host可以有多个实例。

说明:

Device Host顾名思义就是驱动宿主,提供驱动运行的环境。

当驱动部署在用户态时,Device Host可以由独立的进程进行承载。

当驱动在部署在内核态时,Device Host仅表示逻辑隔离。

Device Host的划分原则:Device Host属于一类设备聚合,如Camera,Audio,Display等。

驱动程序是部署在一个Device Host还是部署在不同的Device Host,主要考虑驱动程序之间是否存的业务耦合性,如果两个驱动程序之间存在依赖,可以考虑将这部分驱动程序部署在统一Host。

2)驱动程序实现驱动的具体功能,每个驱动由一个或者多个驱动程序组成,每个驱动程序都对应着一个Driver Entry。Driver Entry主要完成驱动的初始化和驱动接口绑定功能。

3)驱动配置文件.hcs主要由设备信息(Device Information)和设备资源(Device Resource)组成。

Device Information完成设备信息的配置,如配置接口发布策略,驱动加载的方式等。Device Resource 完成设备资源的配置,如GPIO管脚、寄存器等资源信息的配置。

4)驱动接口HDI(Hardware Driver interface )提供标准化的接口定义和实现,驱动框架提供IO Service和IO Dispatcher机制,使得不同部署形态下驱动接口趋于形式一致。

当驱动部署在RTOS(Real-Time Operating System)轻量化操作系统时,驱动接口和驱动程序之间采用的是Function Call方式调用,因此驱动接口仅提供定义,驱动接口实现由驱动程序提供。

2.2 HDF驱动框架工作原理

图2 HDF驱动框架工作原理

Device Manager提供了统一的驱动加载管理机制和驱动接口发布机制。

当Device Host环境加载完成时,Device Manager根据Device Information信息,请求Host加载相应的驱动程序,Device Host在收到请求时,进行以下操作:

1)根据请求加载设备信息,查找并加载指定路径下驱动镜像或从指定段地址(section)查找驱动程序入口;

2)查找驱动设备描述符,匹配对应的设备驱动;

3)当驱动匹配成功时,加载指定驱动程序镜像;

4)Host Framework在驱动镜像加载成功后,调用驱动程序(Driver Entry)的绑定接口和初始化接口,实现与驱动程序的服务对象绑定,同时初始化设备驱动程序;

5)当Device Information配置中的服务策略要求对外暴露驱动接口时,驱动框架就将驱动程序的服务对象添加到对外发布的服务对象列表中,外部客户端程序就可以通过此列表来查询并访问相应的服务接口。

2.3 驱动接口工作机制

图3 驱动接口工作机制

驱动接口主要存在以下几种实现:

● 当驱动以内核组件部署时,客户端程序访问驱动程序需要通过system call方式调用,驱动接口通过IO Service请求将消息通过system call方式调用到内核,并将消息分发到IO Dispatcher处理。