zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    substr函数
    Oracle 日期处理
    translate函数使用
    nvl函数
    random随机函数
    case语句
    列的拼接
    并行HASH JOIN小表广播问题
    WITH AS 优化逻辑读
    【hihoCoder挑战赛28 A】异或排序
  • 原文地址:https://www.cnblogs.com/gezhuangzhuang/p/11447253.html
Copyright © 2011-2022 走看看