第20章 USB主机与设备驱动

来源:互联网 发布:java base64编码方法 编辑:程序博客网 时间:2024/09/21 08:18

本文摘自(偶有较小改动)《Linux 设备驱动开发详解》(宋宝华 编著;人民邮电出版社;),留作纪念。
——Living Park

20 USB主机与设备驱动

20.1 Linux USB驱动层次

20.1.1 主机侧与设备侧USB驱动

       主机侧和设备侧的USB控制器分别称为主机控制器和USB设备控制器,每条总线上只有一个主机控制器,负责协调主机和设备间的通信,而设备不能主动向主机发送任何消息。

20.1.2 设备、配置、接口、端点

       USB协议中,接口由多个端点组成,代表一个基本的功能,是USB设备驱动程序控制的对象,一个功能复杂的USB设备可以具有多个接口。

       端点是USB通信的最基本形式,每一个USB设备接口在主机看来就是一个端点的集合。

20.2 USB主机驱动

20.2.1 USB主机驱动的整体结构

       USB主机控制器有3种规格:OHCIUHCIEHCI

20.2.2 实例:S3C2410 USB主机驱动

       S3C2410内部集成了一个USB主机控制器,完全兼容OCHI 1.0USB 1.1标准,支持低速和全速USB设备。

20.3 USB设备驱动

20.3.1 USB设备驱动的整体结构

       一般通用的Linux设备都不需要工程师再编写驱动,需要编写的是特定厂家、特定芯片的驱动,而且往往也可以参考内核中已提供的驱动的模板。

20.3.2 USB请求块(URB)

       URBUSB设备驱动中用来描述与USB设备通信所用的基本载体和核心数据结构。

20.3.3 探测和断开函数

       对探测函数的调用发生在USB设备被安装且USB核心认为该驱动程序与安装的USB设备对应时,而对断开函数的调用则发生在驱动因为种种原因不再控制该设备的时候。

20.3.4 USB骨架程序

       Linux内核源代码中的driver/usb/usb-skeleton.c文件为我们提供了一个最基础的USB驱动程序,即USB骨架程序,可以被看做一个最简单的USB设备驱动实例。

20.4 USB设备驱动实例

20.4.1 USB串口驱动

       Linux内核中,串口属于tty设备,对于一个USB串口设备而言,其驱动主要由两部分组成:usb_driver的成员函数和tty设备的tty_operation结构体成员函数。

20.4.2 USB键盘驱动

       Linux系统中,键盘被认定为标准输入设备,对于一个USB键盘而言,其驱动主要由两部分组成:usb_driver的成员函数和输入设备的打开、关闭、中断处理等函数。


原创粉丝点击