锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【Linux驱动学习(1)】USB与input子系统,linux统一设备模型,枚举,USB描述符深入剖析

时间:2023-11-13 19:37:00 二极管模块mee75

USB与input子系统

    • 一、linux由统一设备模型组成
    • 二、USB描述符四大描述符
    • 三、USB如何逐步枚举?
    • 四、input生成设备的过程
    • 五、linux usb子系统---通信

一、linux由统一设备模型组成

1、linux成千上万的设备,如何匹配驱动?

  • ①DTS的compatible与driver匹配对应?
  • ②在驱动器中写一个相同的name的device和driver就匹配了?
  • ③usb里面device与driver的PID/VID匹配一样吗?

2、统一设备模型概念

  • 统一:归纳、分类、抽象
  • 设备:成千上万不同功能的硬件设备
  • 模型:标准数据结构和接口

①“四大金刚”

我在百度网盘上上传了统一设备模型的详图,主要包括bus、class、device如何匹配关系,如何驱动文件节点等。如果你感兴趣,你可以理解
链接:https://pan.baidu.com/s/17_7WqEtXOL2lJBYbY_hGPQ
提取码:x6e7

读完这里可以回答开头的问题,linux成千上万的设备,如何匹配驱动?
driver_register()遍历bus_type上的klist_devices根据match函数匹配。
device_register()遍历bus_type上的klist_driver根据match函数匹配。
②三大基石

  • struct kobject:类似于面向对象语言object提供参考计数、名称、父指针等信息。
  • struct kset:kobject一个集合体。
  • struct kobj_type:描述kobject类型和特点。

3、遇到过的USB问题
①枚举失败
②带宽不足
③没有通信数据

二、USB描述符四大描述符

1、描述符

描述符在linux的表示

2、

注意:一个USB主机最多只能分配127个地址(1~127)最多只能连接5层集线器(第五层)hub只能连接设备)。

三、USB如何逐步枚举?


1.下图是插入鼠标枚举的调用栈。hub_event,终点是input_register_device,注册input设备

四、input生成设备的过程

(1)
①获取设备描述符,配置描述符合
②注册usb device

(2)
①符合分析配置描述
②注册一个或多个usb interface device


(3)
①鼠标的interface是一个hid class
②获取hid class描述符
③注册鼠标的hid device

(4)整个input生成设备的过程

附上Linux USB如果您感兴趣,可以了解子系统详解图
链接:https://pan.baidu.com/s/1meE72qRqJPeQGfn0x9aZYw
提取码:sdug

五、linux usb子系统-通信

1、传输方式
控制传输:高优先传输一般用于枚举
中断传输:保证查询频率的传输usb2.0是1ms,免驱触摸框
等时传输:用于音频设备、视频设备等数据量大、实时性要求高的场合
批量传输:用在数据量大、对数据实时性要求不高的场合,带驱触摸框
2、在linux内核,usb通信数据在urb(usb request block)中,urb是usb通信基本数据元。

3、hid的urb数据通信是什么时候开始的?

应用层(如EventHub)open input主机提交设备节点urb开始获取数据。
4.返回主机后如何处理数据?

有数据返回后,被调用hid_irq_in(),从usb device读取数据并报告,通过input子系统报告事件,然后继续提交urb,进行轮询。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章