简单分析USB设备驱动框架(秒懂~)

2022年09月27日18:51:10 科技 1709

在生活、工作中经常会接触到USB设备,如鼠标、键盘、摄像头、可移动硬盘、扫码枪等。这些设备通过USB接口连接到电脑上后,电脑会立刻提示“检测到新硬件...”、安装驱动等。这里需要强调下USB设备使用的是USB总线,window或Linux内核中都会自带usb总线驱动,所以接上USB设备后,主机能够立刻检测到,提醒需要安装设备驱动是指安装USB设备驱动。

USB设备驱动使用USB总线,所以很多操作由USB总线驱动帮我们完成了,我们只需要的按照总线、设备、驱动框架来实现USB设备的驱动既可。USB设备数据的读写操作由总线驱动现在,我们可以直接使用总线读取到的数据,然后解析这些数据的含义、再进行相关的操作就可以了(这里需要注意的一点是USB总线驱动只提供USB设备的读写操作函数,这函数是通用的,即里面的数据的含义总线驱动并不知道)。

USB设备驱动的框架图下,具体的代码可以参考内核中的/drivers/hid/usbhid/usbmouse.c

分配/设置usb_driver结构体,填充里面的.id_table、.probe、.disconnect成员。
调用usb_register把usb_driver结构体注册到内核中。

static struct usb_driver usbtouch_driver = {
	.name		= "myusb",
	.probe		= usbtouch_probe,
	.disconnect	= usbtouch_disconnect,
	.id_table	= usbtouch_devices,
};
 
static int __init usbtouch_init(void)
{
	return usb_register(&usbtouch_driver);
}
 
static void __exit usbtouch_cleanup(void)
{
	usb_deregister(&usbtouch_driver);
}

struct usb_driver中的id_table成员是用与和usb设备进行匹配的选项,表示这个驱动支持的设备。

.probe成员为函数指针,就是在设备和驱动匹配成功的时候执行。

.disconnect成员也为函数指针,在设备和驱动关联成功后再断开执行,如拔了USB设备或卸载USB设备驱动。


更多linux内核视频教程文档资料免费领取后台私信【内核】自行获取.

简单分析USB设备驱动框架(秒懂~) - 天天要闻

简单分析USB设备驱动框架(秒懂~) - 天天要闻

简单分析USB设备驱动框架(秒懂~) - 天天要闻

科技分类资讯推荐

雷军:小米YU7将开启限时改配 非准现车锁单用户可参与 - 天天要闻

雷军:小米YU7将开启限时改配 非准现车锁单用户可参与

来源:环球网 【环球网科技综合报道】7月1日消息,小米董事长雷军今日在其个人社交账号上宣布,小米YU7将开启限时改配服务,非准现车的锁单用户均可参与。此次改配范围明确,仅限于在YU7标准版、Pro版、Max版之间进行版本修改,或对YU7订单
格力集团迎来新任董事长 - 天天要闻

格力集团迎来新任董事长

格力集团官网近日更新显示,出生于1982年的邹晖,已任集团党委书记、董事长。格力集团是珠海市属国企,它与大家熟知的上市公司格力电器是两家企业。著名女企业家董明珠曾同时任格力集团董事长、格力电器董事长,她早在2016年10月就已经卸任格力集团董事长职务,目前仍担任格力电器董事长。截至今年3月,格力集团持有格力电...
深圳华强新设电子公司,含数字技术服务业务 - 天天要闻

深圳华强新设电子公司,含数字技术服务业务

企查查APP显示,近日,深圳聚华芯电子有限公司成立,法定代表人为陈俊彬,注册资本为200万元,经营范围包含:电子产品销售;数字技术服务;电子元器件批发;电子元器件零售;电工仪器仪表销售;智能仪器仪表销售;数字视频监控系统销售等。企查查股权穿透显示,该公司由深圳华强(000062)间接全资持股。...