资讯详情

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

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) input主机提交设备节点urb开始获取数据。 4.返回主机后如何处理数据? 有数据返回后,被调用hid_irq_in(),从usb device读取数据并报告,通过input子系统报告事件,然后继续提交urb,进行轮询。

标签: 二极管模块mee75

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

锐单商城 - 一站式电子元器件采购平台