简要理解usb驱动

本文介绍了Linux下USB驱动的注册模型,包括设备、配置、接口和端点四个层次,并阐述了USB驱动的核心,如struct usb_driver结构体和注册过程。重点讨论了接口设备与驱动的匹配,特别是probe函数的调用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

●Linux的device和driver注册模型

USB的框架遵循“平台总线、设备、驱动”的结构,也分为总线、设备、驱动三大块。其中总线驱动是已经由内核完成的,一旦接入usb设备,总线驱动程序就会找到能处理该设备的驱动进行处理。
在这里插入图片描述

● USB的4个层次: 设备 配置 接口 端点在这里插入图片描述

以树/树干/树枝/树叶为例:
一棵树(设备),一般只有一个树干(配置)(当然可以有多个树干,比如榕树),一个树干上有多个树枝(接口 ),每个树枝有多个树叶(端点)。

USB设备是由一些配置(configuration)、接口 (interface)和端点(endpoint)组成,,即一个USB设备可以含有一个或多个配置,在每个配置中可含有一个或多个接口,在每个接口中可含有若干个端点。一个USB设备驱动可能包含多个子驱动。一个USB设备子驱动程序对应一个USB接口,而非整个USB设备,见上图。

●USB驱动核心

在Linux内核中,使用 struct usb_driver结构体来描述一个USB(接口)驱动,通过usb_register在USB驱动中注册进内核。

接口 device的注册函数是usb_register_dev
接口 driver的注册函数是usb_register → usb_register_driver。
宏定义usb_register如下:

/* use a define to avoid include chaining to get THIS_MODULE & friends */
#define usb_register(driver) \
	usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)

比如鼠标,键盘,u盘,usb转串口,音频,视频等各种各种的物理设备,都会调用usb_register函数来注册。这里一种功能就是一个接口。以HID设备为例,驱动代码如下:

static struct usb_driver hid_driver = {
   
   
	.name =		"usbhid",
	.probe =	usbhid_probe,
	.disconnect =	usbhid_disconnect,
#ifdef CONFIG_PM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归心2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值