基于Linux的USB从设备驱动研究-基础电子_第1页
基于Linux的USB从设备驱动研究-基础电子_第2页
基于Linux的USB从设备驱动研究-基础电子_第3页
基于Linux的USB从设备驱动研究-基础电子_第4页
基于Linux的USB从设备驱动研究-基础电子_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档-下载后可编辑基于Linux的USB从设备驱动研究-基础电子0引言

USB是英文UniversalSerialBus的缩写,意为通用串行总线。USB是一种快速、双向、同步、低成本、动态可连接的串行接口。USB现在已经广泛应用到各种设备上,尤其是手持设备,几乎都采用了USB接口。现在,USB即可用来与其他设备连接后高速地传递数据,又可用来充电,使手持设备可以发挥U盘、MODEM、无线网卡等作用。

事实上,USB只是主机和外围设备之间的连接。如何来促使这种连接发挥作用,就需要驱动程序。驱动程序主要解决硬件“需要提供什么功能”以及“如何使用这些功能”。在linux系统中,USB设备可以作为主机使用,也可作为从设备使用。对应的USB驱动程序有两种主要的类型:宿主系统上的驱动程序和设备上的驱动程序。从宿主的观点来看(例如普通的左桌面计算机),宿主系统的USB驱动程序控制插入其中的USB设备,而USB设备的驱动程序则控制该设备如何作为一个USB设备和主机通信。

1USB设备基础

USB设备的构成包括配置接口和端点,以及USB驱动程序如何绑定到USB接口上。端点是USB通信基本的形式,USB端点只能是往一个方向传送数据,即从主机到设备(称为输出端点)或者从设备到主机(称为输入端点),故可以看作是单向管道。USB有四种不同的类型,分别对应不同的传输类型:控制、中断、批量、等时。其次接口,USB端点被绑定即为接口。USB的一个接口只处理一种USB逻辑连接;一个USB设备可以有多个接口,不同的接口可以代表不同的功能,因此,功能不同的USB接口需要不同的驱动程序。另外就是配置,USB接口本身被绑定为配置。一个USB设备可以有多个配置,而且可以在配置之间切换以改变设备的状态;一个时刻只能激活一个配置,怛一个配置通常具有一个或者更多的接口。

USB设备可由许多不同的逻辑单元组成,实际上,也就是这三种逻辑单元组合而成的。Linux内核中的USB代码一般要用URB(usbrequstblock)与USB设备通信。URB用structurb结构体描述,它能以一种异步的方式往/从特定的USB端点发送/接收数据。USB设备驱动程序可能会为单个端点分配许多的URB,也可能对许多不同的端点重用单个URB,这取决于驱动的需要。当USB驱动程序只发送或接收一些简单的USB数据时,可以使用两个很简单的接口函数:usb_bulk_msg、usb_control_msg。

2USB设备驱动程序的结构

图1所示是Linux环境下USB驱动的总体结构。从图l中可以看到:在主机侧层次结构中,实现USB驱动有两类方式:USB主机控制器驱动和USB设备驱动;USB主机控制驱动主要控制插入其中的USB设备,主机控制器可以分为三类,分别对应于三种USB主控制器;USB设备驱动则用于控制USB设备如何与主机通信;USB负责USB驱动管理和协议处理的主要工作。

USB向上可为设备驱动提供编程接口,向下可为USB主机控制器驱动提供编程接口;它可以通过全局变量维护整个系统的USB设备信息,从而完成设备的热插拔控制和总线数据传输控制等驱动。

另外,在从设备侧,Linux内核中的USB设备侧驱动程序可分为3个层次:USB设备控制器(UDC)驱动程序、GadgetAPI和Gadget驱动程序;UDC驱动程序可直接访问硬件,控制USB设备和主机间的底层通信,并向上层提供和硬件相关的操作回调函数。不同的设备控制器硬件有不同的设备控制器驱动程序;Gadget驱动主要控制USB设备功能的实现,它使用GadgetAPI传递控制信息给UDC驱动程序,以便实现具体功能。

GadgetAPI是设备控制器的控制功能抽象接口,Gadget驱动程序可以试用GadgetAPI,它可以把下层的UDC驱动程序和上层Gadget驱动程序相隔离,以使得在linux系统中编写USB设备侧驱动程序时,能够把功能的实现和底层通信相分离。

如果要在S3c24.10上实现大存储类从设备,则需要运行file_storage.c和s3c2410_udc.c这两个驱动程序。file_stoarge.c具体控制USB设备功能的实现,它使用GadgetAPI来控制s3c2410.c以实现其功能。s3c2410.c驱动程序可直接访问硬件,以控制USB设备和主机间的底层通信,同时向上层提供和硬件相关操作的回调函数。

3USB从设备驱动

驱动程序完成的功能包括初始化设备、为各类设备提供服务、负责内核与设备间的数据交换、以及检测和处理设备工作过程中出现的错误等。

基于完成这些功能,每个驱动程序都需要注册和注销,这样,内核才能知道有这个驱动的存在或者驱动的卸载。下面是两个基本的模块:

module_init(usb_skel_init);

module_exit(usb_skel_exit);

对于USB从设备而言,结构USB_gadget就可以代表。Gadget通过“Gadget驱动程序”来实现设备功能,处理所有的USB配置和接口。通过操作函数集,Gadget驱动程序与硬件特定代码间接通信。它将Gadget驱动程序与那个硬件细节隔开,并通过I/O队列包装硬件端点。“usb_gadget”“usb_ep”接口则可提供对硬件的隔离。

其结构usb_gadget的代码如下:

结构usb_gadget_ops是USB设备控制期的设备控制函数集,其操作包括get_frames、wakeup、pullop、ioctl等。结构structusb_ep是USB端点从设备侧的代表,总线控制器驱动程序中列出了在gadget-ep_list里所有的通用端点,但控制端点不在列表中,它仅在回应驱动程序的setup0回调函数时才被访问,其代码如下:

4结束语

本文主要通过在S3C2401上实现USB从设备的驱动程序,介绍了USB从设备驱动的研究方法。Linux作为一个开源操作系统,设备驱动程序的开发有着其它操作系统不可比拟的优势,大量的开放源代码无

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论