转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】

转自:http://blog.csdn.net/jimmy_1986/article/details/5838297

嵌入式linux下的usb属于所有驱动中相当复杂的一个子系统,要想将她彻底征服,至少需要个把月的时间,不信?那是你没做过。

本人做过2年的嵌入式驱动开发,usb占了一大半的时间。期间走了不少弯路,下面将我的血的经验教训总结下,为要从事和正在从事的战友们做一点点贡献吧:)

首先,扫盲;

要做的是阅读usb Spec(英文的哦,其实很多文章、书籍和资料真有水平的还是原创的好,就像食品往往经过加工就变了味,之前如果没有接触过的话可以先看看中文的,大概先有个印象),这个工作其实是很复杂很枯燥的一部分。看Spec的同时可以到网上大概浏览下usb开发的相关知识,这个阶段就是扫盲,不求精进。至少你得知道usb的四种传输类型吧,你得知道usb从上电开始的几个状态吧,你得知道usb设备都有哪些吧,等等。

第二步,窥全貌;

usb设备是如何工作起来的?其实usb子系统是分层次工作的,他们配合默契,做好自己的份内之事,一切以大局为重。usb驱动可以分为usb设备驱动,usb控制器驱动,hub驱动,总线驱动等等。我建议你还是顺着设备驱动的这根主线往下走吧。

在真正开始分析usb驱动代码这之前,你需要了解linux模块机制,linux驱动的platform总线构架,之类。一个模块被加载后,从driver的角度来说,真正将设备驱动起来是从probe开始的。这个你该知道。你得知道为什么usb可以即插即用,做软件的朋友该知道线程这个东西吧,和她有关系的。usb系统里面一个最重要的角色该出场了,urb。一切的一切都要围绕她进行。pipe为她铺路,数据由她承载。usb设备驱动的工作就是准备好这个urb后她的使命就基本完成了,那她把urb给了谁?这就是之前提到的usb控制器驱动,host。

至于host,现在市场上有很多款,如果你老板给你用的是市面上用的最成熟的像EHCI,那么你太幸运了。这个基本不用你写,只要稍加修改,把她注册到总线上即可。如果你很不幸,使用了像musb这样的host,你惨了,有你苦头吃了。

第三步,精益求精;

这个时候驱动你也调过了,也许这时候已经跑起来了,也许还没跑起来。可能你开始浮躁了,到这个时候咋的也过去个把月了,如果还没出成果难免心急。好,这时候如果是这样,你该做什么呢?    重新看Spec,重新看整个驱动过程,重复之前做过的事情。这次你再看绝对和之前不一样了。这时候你要学会的是,坚持,耐力.................

最后,给大家介绍一下我自认为不错的资料,你可以参考。像复旦一哥们写的linux那点事儿(大家嫌麻烦可以到我这里下载Linux那些事儿之我是U盘.pdf),ldd3,最好的资料是源代码。

时间: 2025-01-29 09:18:37

转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】的相关文章

WinXP下USB驱动开发(十)

3.4.       其他说明 Ø       编译环境:Win XP Checked Build Environment/Win XP Free Build Environment Ø       开发环境:Microsoft Visual C++ 6.0 Ø       调试工具:Debugging Tools for Windows (x86)(WinDbg) Ø       开发周期:2009-11-7到2009-10-24 Ø       设计人员/编码人员/调试人员:罗振辉 第4节 

WinXP下USB驱动开发(四)

第3节       设计说明 3.1.       概要设计 该任务主要包括上位机USB驱动开发.LPC2440 下位机程序开发.调试三部分.其中LPC2440 下位机程序开发部分已经完成,不需要再行设计和开发.因此接下来的任务主要由上位机USB 驱动开发和调试两部分构成.严格来说调试又分检测软件的编写和整体调试两部分.因此我们的设计工作主要如下几部分(图3-1-1). 概要设计如下: 上位机USB驱动设计:采用WDM驱动设计模式开发,遵循严格的USB2.0规范,实现即插即用.数据传输等驱动功能

WinXP下USB驱动开发(九)

3.3.4.  测试设计 测试是驱动开发的重要环节,主要包括扩展性测试.健壮性测试和稳定性测试.针对如下USB测试,我们主要设计了枚举.中断传输.批量传输.8*PackSize[64]数据传输.17/2*PackSize[64]数据传输和24小时压力测试等几个方面,从这几个方面完全涵盖扩展性测试.健壮性测试和稳定性测试,详细介绍如下. 3.3.4. 1.    下位机程序配合简要 该驱动准备通过LPC2400 系列ARM USB设备控制器的逻辑端点2收发大量数据,但其最大信息包只能为64字节,如

WinXP下USB驱动开发(一)

  目  录 第1节    概述.... 4 第2节       USB相关技术.... 4 2.1.      USB拓扑结构... 4 2.2.      USB数据流模式... 5 2.3.      USB四种传输模式... 7 2.3.1.      批量传输... 7 2.3.2.      控制传输... 7 2.3.3.      中断传输... 8 2.3.4.      同步传输... 9 2.4.      USB协议层规范... 10 2.5.      USB HUB规

WinXP下USB驱动开发(八)

3.3.2.8.    即插即用(PNP) 即插即用(Plug and Play -- PnP)管理器使用主功能码为IRP_MJ_PNP的IRP与设备驱动程序交换信息和请求.这种类型的请求是新引入到Windows 2000和WDM中的,在以前版本的Windows NT中,大部分检测和配置设备的工作由设备驱动程序自己做.而WDM驱动程序可以让PnP管理器做这个工作.为了与PnP管理器协同工作,驱动程序开发者需要了解一些相关的IRP. 在WDM中,PnP请求扮演了两个角色.在第一个角色中,这些请求指

WinXP下USB驱动开发(七)

3.3.2.6.  电源管理 3.3.2.6.1. WDM电源管理模型 在Windows 2000和Windows 98中,操作系统接管了大部分电源管理工作.当然,这是因为只有操作系统才能真正了解电源管理的内部过程.例如,系统BIOS负责的电源3.3.2.6.管理不能区分应用程序使用的屏幕和屏幕保护程序使用的屏幕之间的区别.但操作系统可以区分开这种不同,从而确定是否可以关闭显示器. 作为计算机全局电源策略,操作系统支持一些用户接口元素,用户可以通过这些接口元素控制最终的电源管理策略.这些用户接口

Linux下USB驱动框架分析【转】

转自:http://blog.csdn.net/brucexu1978/article/details/17583407 版权声明:本文为博主原创文章,未经博主允许不得转载. http://www.cnblogs.com/general001/articles/2319552.html     http://blog.csdn.net/uruita/article/details/7263290:MODULE_DEVICE_TABLE   http://blog.chinaunix.net/ui

WinXP下USB驱动开发(三)

2.6.       端点.管道和接口 在USB开发当中这三个概念容易混淆,对于真实环境中的USB操作,端点.管道和接口更是不可忽略的,该三者关系如图2-6-1:   端点.在这里特指USB物理端点,在NXP LPC2478 USB中最多有32个物理端点,从0到31每一种端点都有其固定的传输方式(I/OUT),其中IN是指HUB向HOST发送数据,OUT是指HOST向HUB发送数据. 管道.是一种端点的逻辑概念,说白了就是逻辑端点,是人性的为USB物理端点进行分组,两个为一组,其中一端点为IN类

WinXP下USB驱动开发(五)

3.3.2.  程序设计 与传统PC总线(如PCI总线)设备的驱动程序相比,USB设备驱动程序从不直接与硬件对话.相反,它仅靠创建URB(USB请求块)并把URB提交到总线驱动程序就可完成硬件操作. 可以把USBD.SYS看作是接受URB的实体,向USBD的调用被转化为带有主功能代码为IRP_MJ_INTERNAL_DEVICE_CONTROL的IRP.然后USBD再调度总线时间,发出URB中指定的操作. 3.3.2.1.    数据结构 3.3.2.1.1. 设备描述符 每个设备都有一个唯一的