LINUX操作系统USB驱动程序

LINUX操作系统USB驱动程序

ID:41063349

大小:46.50 KB

页数:10页

时间:2019-08-15

LINUX操作系统USB驱动程序_第1页
LINUX操作系统USB驱动程序_第2页
LINUX操作系统USB驱动程序_第3页
LINUX操作系统USB驱动程序_第4页
LINUX操作系统USB驱动程序_第5页
资源描述:

《LINUX操作系统USB驱动程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一、引言  USB(UniversalSerialBus)即通用串行总线,是一种全新的双向同步传输的支持热插拔的数据传输总线,其目的是为了提供一种兼容不同速度的、可扩充的并且使用方便的外围设备接口,同时也是为了解决计算机接口的太多的弊端而设计的。一个USB系统主要有三部分组成:USB互连、USB主机、USB设备三部分组成的,其结构如图1所示。在编写USB设备驱动程序设计时,可以分为三部分编写:主机端设备驱动程序、主机控制器驱动程序设计和设备端驱动程序三部分,在本文中重点介绍主机端驱动程序的设计。  二、USB设备驱动程序的设计  USB设备驱动程

2、序的设计包括主机端设备驱动程序设计、主机控制器驱动程序设计和设备端驱动程序设计三部分组成。主机端设备驱动程序就是通常说的设备驱动程序,它是主机环境中为用户应用程序提供一个访问USB外设的接口。Linux为这部分驱动程序提供编程接口,驱动程序设计者只要按照需求编写驱动程序框架,通过调用操作系统提供的API接口函数可以完成对USB外设的特定访问。  主机控制驱动主要是对USB主机控制器的驱动,在大多数PC环境下,主机控制器都是由操作系统提供。嵌入式设备一般都没有USB主机控制器,只是工作在Slave模式下。如果要使USB具有主机功能,那么设备中需要选

3、用一个带主机控制器的USB接口控制芯片,同时自己还要有实现该主机控制器的驱动程序。目前Linux内核中只提供USB主机控制器的开放主机控制器和通用主机控制器接口两种规格,而这两种规格主要用在PC架构中。USB主机端驱动程序与主机控制器的结构如图2所示。其中USB核是Linux的一个子模块,集中定义了一组USB相关的数据结构、宏以及API函数。  USB设备驱动程序是常说的设备固件程序的一部分,提供设备信息与主机的通信接口。设备端USB驱动程序设计由以下几部分处理程序组成。初始化例程:完成描述符指针、端点、配置改变等操作。数据传输例程:完成控制传输

4、、批量传输、中断传输及同步传输等传输方式下的数据收发工作。标准设备处理请求:处理标准设备请求。厂商请求处理:处理生产商指定请求。其他操作:处理主机发出的端口复位、配置改变等操作。  1.USB设备驱动程序框架  USB驱动程序首先要向Linux内核注册自己,并告诉系统它所支持的设备类型以及它所支持的操作。这些信息通过一个usb_driver结构来传递。usb_driver结构如下:  staticstructusb_driverskel_driver={  name:"skeleton";/*驱动程序的名称*/  probe:skel_probe

5、;/*设备列举时被调用*/  disconnect:skel_disconnect;/*设备被卸载时被调用*/  fops:&skel_fops;/*指向一个file_operation结构,内核通过它来访问驱动程序的文件操作函数,与用户程序的read、write等操作进行交互*/  minorUSB_SKEL_MINOR_BASE;/*指向设备的次设备号,用于系统识别主设备号相同的设备(即一个驱动程序可以同时支持多个USB设备*/  id_table:skel_table;/*保存设备的厂商ID和产品ID,作为该设备的唯一标识,驱动程序向系统注

6、册后,当下次插入时,系统根据这个标识查找正确的驱动程序,实现设备的即插即用*/  };  staticstructfile_operationskel_fops={  {  owner:THIS_MODULE,  read:skel_read,  write:skel_write,  ioctl:skel_ioctl,  open:skel_open,  release:skel_release,  };  (1)注册和注销  USB驱动程序注册,就是把在初始化函数中填好的use_driver结构作为参数传递给  use_register()函数

7、即可,函数的调用方法为:  result=usb_register(&skel_driver);  当要从系统卸载驱动程序时,也是将use_driver结构作为参数传递给usb_deregister函数处理。函数的调用格式为:  staticvoid__exitusb_skel_exit(void)  {/*deregisterthisdriverwiththeUSBsubsystem*/  usb_deregister(&skel_driver);  }  module_exit(usb_skel_exit);  当USB设备插入时,为了使li

8、nux-hotplug(Linux中PCI、USB等设备热插拔支持)系统自动装载驱动程序,需要创建一个MODULE_DEVICE_TAB

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。