欢迎来到天天文库
浏览记录
ID:44416950
大小:60.50 KB
页数:12页
时间:2019-10-21
《usb驱动分析论文》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、迪黄為學ftLinux课程设计院系:信息工程学院专业:10电子信息工程学号:姓名:指导教师::•、引言USB即通用串行总线,是一种全新的双向同步传输的支持热插拔的数据传输总线,其目的是为了提供-种兼容不同速度的、可扩充的并且使用方便的外围设备接口,同时也是为了解决计算机接口的太多的弊端而设计的。一个USB系统主耍有三部分组成:USB互连、USB主机、USB设备三部分组成的。在编写USB设备驱动程序设计时,可以分为三部分编写:主机端设备驱动程序、主机控制器驱动程序设计和设备端驱动程序三部分,我将重点介绍上机端驱动程序的设计。二、USB设备驱动程序的设计USB设备驱动程序的
2、设计包括主机端设备驱动程序设计、主机控制器驱动程序设计和设备端驱动程序设计三部分组成。主机端设备驱动程序就是通常说的设备驱动程序,它是主机环境中为用户应用程序提供一个访问USB外设的接口。Linux为这部分驱动程序提供编程接口,驱动程序设计者只要按照需求编写驱动程序框架,通过调用操作系统提供的API接口函数可以完成对USB外设的特定访问。主机控制驱动主要是对USB主机控制器的驱动,在大多数PC环境下,主机控制器都是由操作系统提供。嵌入式设备一般都没有USB主机控制器,只是工作在Slave模式下。如果要使USB具有主机功能,那么设备中需要选用…个带主机控制器的USB接口控
3、制芯片,同时自己还要有实现该主机控制器的驱动程序。目前Linux内核中只提供USB主机控制器的开放主机控制器和通用主机控制器接口两种规格,而这两种规格主要用在PC架构屮。USB主机端驱动程序与主机控制器的结构如图2所示。其中USB核是Linux的一个子模块,集中定义了一组USB相关的数据结构、宏以及API函数。USB设备驱动程序是常说的设备固件程序的…部分,提供设备信息与主机的通信接口。设备端USB驱动程序设计由以下几部分处理程序组成。初始化例程:完成描述符指针、端点、配置改变等操作。数据传输例程:完成控制-、引言准设备处理请求:处理标准设备请求。厂商请求处理:处理生产
4、商指定请求。其他操作:处理主机发出的端口复位、配置改变等操作。1.USB设备驱动程序框架USB驱动程序首先要向Linux内核注册自己,并告诉系统它所支持的设备类型以及它所支持的操作。这些信息通过一个usb_driver结构来传递。usbdriver结构如下:staticstructusbdriverskeldriver二{name:〃skeleton";/*驱动程序的名称*/probe:skel_probe;/*设备列举时被调用*/disconnect:skel_disconnect;/*设备被卸载吋被调用*/fops:&skel_fops;/*指向一个fileoper
5、ation结构,内核通过它来访问驱动程序的文件操作函数,与用户程序的read,write等操作进行交互*/minorUSB_SKEL_MINOR_BASE;/*指向设备的次设备号,用于系统识别主设备号相同的设备(即一个驱动程序可以同时支持多个USB设备*/idatable:skel_table;/*保存设备的商ID和产品ID,作为该设备的唯一标识,驱动程序向系统注册后,当下次插入吋,系统根据这个标识查找正确的驱动程序,实现设备的即插即用*/};staticstructfile_operationskel_fops={{owner:TIIIS_MODULE,read:sk
6、el_rea.d,write:skel_write,ioctl:skel_ioctl,open:skelopen,release:skelrelease,};(1)注册和注销USB驱动程序注册,就是把在初始化函数中填好的use_driver结构作为参数传递给use_register()函数即可,函数的调用方法为:result=usb_register(&skel_driver);当要从系统卸载驱动程序时,也是将use^driver结构作为参数传递给usb_deregister函数处理。函数的调用格式为:staticvoid_exitusb_skel_exit(void)
7、{/*deregisterthisdriverwiththeUSBsubsystem*/usb_dcrcgistcr(&skcl_drivcr);}moduleexit(usbskelexit):当USB设备插入时,为了使linux-hotplug(Linux中PCI、USB等设备热插拔支持)系统口动装载驱动程序,需要创建一个MODULE_DEVICE_TABLEo核心代码如下(这个模块仅支持某一特定设备):/*tableofdevicesthatworkwiththisdriver*/staticstructusb_device_ids
此文档下载收益归作者所有