USB驱动程序(基础)

以前阅读过《圈圈教你学USB》,介绍USB比较详细,但一直没有总结,今天简单总结一下~

USB支持热插拔,使用方便,越来越受欢迎

USB2.0支持60M/B/s的速率。

最新的USB3.0最高可支持500MB/s。

USB按主机控制器可分为如下:

        UHCI 通用主机控制器接口;

        OHCI 开发主机控制器接口;

        EHCI 增强型主机控制器接口;

        USB OTG控制器

传输模式:

        控制传输模式;

        批量传输模式;

        中断传输模式;

        等时传输模式;

寻址是个比较重要的概念,USB设备里每个可寻址单元称作端点,为每个端点分配的地址就是端点地址。每个端点都有对应上说说的一种传输模式。

地址为0的端点专门用来配置设备,控制管道和它连接,完成设备枚举过程。

每个端点可上行或下行传输数据,分别对应IN传输和OUT传输。

以上是写基本概念,对于linux 的USB子系统;

USB核心:主要包含结构体和一些函数;

HCD:驱动不同的主机控制器;

hub驱动,内核辅助线程kuubd;

驱动程序的数据结构:

usb_device 结构体,对于不同的外设,linux内核都抽象成一个对应的结构体,比如pci_dev/net_device等,

具体的结构体定义可以看内核源码,在include/linux/usb.h 中

另一个比较重要的结构体积是URB,也定义在include/linux/usb.h中,urb主要供USB协议栈使用,

URB使用主要是,分配内存(usb_alloc_urb), 初始化 urb相关的kobject和锁,最后进行提交,usb_submit_urb.

urb使用完成后,需要调用usb_free_urb释放,

管道:

端点地址;

数据传输方向;

数据传输模式;

描述符:

设备描述符;

配置描述符;

接口描述符;

端点描述符

枚举的过程:

1.插入一个USB设备后,集线器驱动器检测到电平变化后,根集线器会报告,系统唤醒khubd线程,

2.识别到插入设备的端口后,khubd在1~127中分配批量端点,

3.khubd利用端口0使用的可控制urb从驱动器获得设备描述,配置描述符。

4.khubd请求usb核心使驱动程序和设备帮点,紧接着执行probe.

至此,usb设备与驱动匹配完成,当然实际会有更多细节,先从概念入手,会建立整体框架,磨刀不误砍柴~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

知秋贺

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

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

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

打赏作者

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

抵扣说明:

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

余额充值