USB设备驱动模型和输入子系统

Posted gezhuangzhuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USB设备驱动模型和输入子系统相关的知识,希望对你有一定的参考价值。

嵌入式设备驱动的编写,基本上都要按照一定的驱动模型编写。不这么做的话,一旦设备发生了更新和改变,大部分的驱动代码都要推倒重来,代码的重用率低,不具备移植性。所以在新版linux2.6.22以后的内核版本中设计总线设备驱动模型,其实就是将单一的驱动拆成三部分:总线设备驱动、核心层驱动(纯软件)、设备层驱动

这样总线驱动和核心层驱动为重复性工作,不需改动。所以工作量主要体现在设备层驱动上。

内核中有不同的总线类型,不同的总线有不同的匹配方式。platform_bus_type总线使用名字来匹配,而usb_bus_type使用id_table来匹配,但是各种总线的匹配流程大致是一样的。将设备和驱动通过总线连接起来需要用到match函数。

技术图片

 USB总线驱动程序的作用

  1. 识别USB设备

    1.1 分配地址

    1.2 并告诉USB设备(set address)

    1.3 发出命令获取描述符

  2. 查找并安装对应的设备驱动程序

  3. 提供USB读写函数

USB设备在插入嵌入式设备时会给CPU一个中断信号,驱使总线驱动控制的USB控制器来与USB设备发送握手信息,match函数将id_table与USB设备的设备信息一一核对。成功匹配后调用probe函数。

而probe函数主要实现的就是input输入子系统。这个输入子系统已经将各类输入事件,比如鼠标、键盘、手柄等常用的输入设备信号封装好了。输入子系统的框架如下:

  1.分配 input_dev结构体

  2.设置input_dev结构体

  3.注册input_dev结构体

  4.硬件相关的操作

 

怎么写USB设备驱动程序?

1. 分配/设置usb_driver结构体

        .id_table

        .probe       (最重要的函数)

        .disconnect

2. 注册(usb_register)

 

以上是关于USB设备驱动模型和输入子系统的主要内容,如果未能解决你的问题,请参考以下文章

linux 输入设备驱动

Linux嵌入式驱动学习之路(十六)输入子系统

kalilinux系统怎么装

USB设备驱动程序1

安全牛学习笔记使用 USB 设备来安装系统

如何在Win7系统镜像中加入USB3.0驱动程序啊?