嵌入式linux下的usb设备驱动技术

嵌入式linux下的usb设备驱动技术

ID:28152669

大小:73.00 KB

页数:4页

时间:2018-12-08

嵌入式linux下的usb设备驱动技术_第1页
嵌入式linux下的usb设备驱动技术_第2页
嵌入式linux下的usb设备驱动技术_第3页
嵌入式linux下的usb设备驱动技术_第4页
资源描述:

《嵌入式linux下的usb设备驱动技术》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、嵌入式Linux下的USB设备驱动技术Linux以其稳定、高效、易定制、硬件支持广泛、源代码开放等特点,已在嵌入式领域迅速崛起,被国际上许多大型的跨国企业用作嵌入式产晶的系统平台。USB是UniversalSerialBus(通用串行总线)的缩写,是1995年由Microsoft、Compaq、旧M等公司联合制定的一种新的PC串行通信协议。它是-种快速、灵活的总线接口。与其它通信接口相比较,USB接U的最人特点是易于使川,这也足USB的主要设计R标。USB的成功得益于在USB标准屮除定义丫通信的物理S和电器S标准外。还定义了一套相对完整的软件I办议堆桟。这使

2、得多数USB设备都很容易在各种T•台上工作。作为一种高速总线接UI,USB适川丁•多种没备(如数码相机、MP3播放器、商速数据采集没备等)。另外,USB接U还支持热插拔,而且所科的配H过程都由系统£

3、动完成,无须用户干预。1Linux下的USB设备驱动在Linux内核的不断升级过程中,驱动程序的结构相对稳定。凼于USB设备也是外围设备的一种,因此,它的驱动程序结构与普通设备的驱动程序相同。Linux系统的设备分为字符'没备(CharDevice)和块设备(BlockDevice)。字符设备支持而A块字符的I/0操作,它不通过系统的快速缓存,而只支持顺序存取。

4、块设备则支持刖向块的I/O操作,所有块设备的i/o操作都通过在内核地址空间的i/o缓冲区进行,可以支持几乎任意长度和任意位置上的I/O请求。块设备与字符设备还有一点不同,就是块设备必须能够随机存取(RandomAccess),字符没备则没奋这个要求。典型的字符没备包拈鼠标、键盘、串行U等,而块设备主要包括硬盘软盘设备、CD-Rom等。由十USB设备主要都是通过快速串行通讯来读写数裾,因此一般都可作为字符设备来进行处理。2Linux卜的USBcore2.1Linux中USBcore与USB的结构关系Linux操作系统屮奋•一个叫做“USBcore”的子系统,川

5、提供支持USB没备驱动程序的API和USB主机控制器的驱动程呼。同时提供有许多数裾结构、宏定义和功能函数来对硬件或设备进行支持。在Linux下编写USB设备的驱动程序时,从严格意义h讲,就是使用这呰USBcore的了系统所定义的数据结构、宏和函数来编3数据的处理功能。在Linux下,core、hostcontroller和driver三者之间的关系如图1所示。91Linux下的USBtt构央系ffl2.2USBcore的初始化USBcore从USB子系统的初始化开始。USBf•系统的初始化则在文件drivers/usb/core/usb.c里。其代码如下:s

6、ubsys_initcall(usb」nit);module_exit(usb_exit);代码中的subsysjnitcall是一个宏,相当于module_init,只不过因为这部分代码足核心,开发者通常把它看作-个子系统,而不仅仅足一个模块。因为USBcore模块代表的不是某一个设备,而是所有USB设备赖以生存的模块。W此,在Linux屮,像这样把一个类别的设备驱动归结为一个了•系统(比如PCI了•系统、scsi了•系统等)。菽木上,drivers/R录下而第一层的每个n录都可算作一个子系统,因为它们代表了一类设备。一般地,usbjnit是真K的初始化函

7、数,而usb_exit()则是整个USB子系统结柬时的清理函数:staticint_initusbjnit(void)Iretval=bus—register(&usb一busjype);retval=U9b_register_device_driver(&usb__gener-ic-driver,THIS一MODULE);函数usbinit主要完成初始化和汴册设备2.3USB里的设备模型Linux里一个很重要的概念是设备模型。对于驱动来说,设备的概念就是总线和与其相连的各种设备。在内核里,总线、设备、驱动也就是bus、device、driver是设备模型很

8、重要的三个概念,它们都有自己专属的结构。在include/linux/devide.h里的定义为:structbus_type{}:structdevice{);structdevice_driver{};每次出现一个设备都要h'd总线注册,每次出现一个驱动,也要M总线注册。系统初始化时,应扫描连接许多设备,并为每一个设备建立一个structdevice的变虽。每一次都应有一个驱动程炸,并要准备-个structdevice_driver结构的变量。还要把这作变虽加入和皮的键表(如把device插入devices链表,driver插入drivers链表)。这样

9、,通过总线就能找到每一个设备和每一个驱动。然而,假如

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

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

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