原文:USB DDK助你轻松实现USB驱动开发,点击链接查看更多技术内容。
HDF(Hardware Driver Foundation)驱动框架是HarmonyOS硬件生态开放的基础,为开发者提供了驱动加载、驱动服务管理和驱动消息机制等驱动能力,让开发者能精准且高效地开发驱动程序。
本期,我们将为大家带来HDF驱动框架中USB DDK的解析与指导。
一、USB DDK介绍
USB(Universal Serial Bus)通用串行总线,用于规范电脑与外部设备的连接和通讯,包含了主机端(Host)和设备端(Device)。其中,主机端负责USB总线中的数据传输及端口管理,设备端则可以连接各种外设,所以USB驱动开发又分为主机端驱动开发和设备端驱动开发。
由于基于内核态开发的USB驱动功能扩展性较差,目前开发者通常选择Libusb库进行USB驱动开发。该库是一种跨平台的用户态开源USB通信库,可以满足开发者基于用户态开发功能驱动的需求。但是,由于Libusb库是完全按照USB协议来封装接口的,所以需要开发者对USB协议要有较深的了解才能很好的使用,对开发者的要求相对较高,让很多比较初级的开发者望而却步。为了让更多的开发者都能进行基于用户态的USB驱动开发,HDF引入了USB DDK开发套件。
USB DDK(USB DriverDevelop Kit)是HDF驱动框架为开发者提供的USB驱动程序开发套件,包括USB Host DDK及USB Device DDK两部分,支持基于用户态开发USB设备驱动的同时,还提供了丰富的USB驱动开发能力,让广大开发者能精准且高效的开发USB驱动程序。
下面,我们将一一道来。
1)USB Host DDK
USB Host DDK给开发者提供了主机端USB驱动开发能力,按照功能分类三大类,分别是DDK初始化类、interface对象操作类及request对象操作类。并为开发者提供了普通模式和专家模式两种开发模式。普通模式下,开发者可通过USBDDK API直接完成相关USB数据读写操作,不需要过多关注底层传输细节。
专家模式下,开发者通过USB RAW API直接访问OS平台USB通道的接口,自定义实现更加复杂的功能。目的是给驱动层留有更灵活,更强大的扩展方案,同时也能够兼容现有驱动,便于移植。USBHost DDK架构如图1所示:
图1 USB Host DDK架构
(1)USB Interface Pool负责USBInterface管理。提供USB Interface申请和回收,USB Interface记录设备端口信息以及资源。USB Interface Pool按照USB Port对USB Interface进行分类管理。同时,此模块还提供了USB DDK API,方便开发者USB数据读写操作。
(2)USB Protocol Layer提供USB协议封装,根据USB协议对设备IO/控制命令的“翻译/解析”,同时负责设备描述符的管理,根据USB Device上报的枚举信息,匹配对应的描述符,并构建对应的USB Interface,并加入到USB Interface Pool中管理。
(3)Device IO Manager负责USBIO请求管理,提供了同步IO和异步IO管理机制,对于异步IO,IO Manager负责将该请求记录下来,然后通过Raw API Library提供的接口依次处理待发送的IO请求;当收到USB控制器应答的处理结果后,IO接收线程负责解析并上报处理结果给上层调用者。
(4)Raw API Library抽象了底层OS能力,定义了统一的OS能力接口,对外提供了USB RAW API,让开发者自定义实现更加复杂的驱动功能。
(5)OS Adapter用于封装与平台(Linux和LiteOS)相关的操作,根据不同平台配置编译对应平台的封装接口。在Linux平台上,访问USBFS的操作,全部都封装在这个模块中;而在LiteOS平台上,基于FreeBSD USB框架的设备访问操作,对应的也都全部封装在这个模块中。
(6)PNP Notify用于动态监测USB状态变化,当有新设备添加/移除时,变化设备信息。同时将所有USB设备信息都通过KHDF上报给UHDF侧的PNPNotify Manager模块来完成加载/卸载第三方功能驱动。
2)USB Device DDK
USB Device DDK给开发者提供了设备端USB驱动开发能力。例如,USB端口动态注册和去注册能力,开发者可以基于能力实现USB端口的动态添加和组合;动态实例化能力,支持根据动态下发设备、配置、接口及端点描述符创建设备实例及传输通道;用户态的数据发送及接收能力,支持用户态下发送及接收数据;复合设备能力,支持一个物理设备上多个逻辑设备,实现多个逻辑设备间隔离,并支持不同逻辑设备同时被不同的应用进程访问。
USB Device DDK架构如图2所示:
图2 USB Device DDK架构
(1)SDK IF负责将USB设备按照设备、接口、管道进行逻辑划分,对配置管理、设备管理、IO管理进行封装。此模块还向开发者提供了设备创建、获取接口、接收Event事件、收发数据等设备测驱动开发的能力接口。