转: 嵌入式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,最好的资料是源代码。
转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】的更多相关文章
- Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析
源: Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析
- Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析
SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈.可以实现用户主平台数据通过SDIO口到无线网络之间的转 ...
- Linux下USB驱动框架分析【转】
转自:http://blog.csdn.net/brucexu1978/article/details/17583407 版权声明:本文为博主原创文章,未经博主允许不得转载. http://www.c ...
- linux下usb驱动接口中端点介绍
端点 USB 通讯的最基本形式是通过一个称为端点的东西.一个USB端点只能向一个方向传输数据(从主机到设备(称为输出端点)或者从设备到主机(称为输入端点)).端点可被看作一个单向的管道. 一个 USB ...
- Linux下 USB设备驱动分析(原创)
之前做过STM32的usb HID复合设备,闲来看看linux下USB设备驱动是怎么一回事, 参考资料基于韦东山JZ2440开发板,以下,有错误欢迎指出. 1.准备知识 1.1USB相关概念: USB ...
- Linux下Power Management开发总结
本文作为一个提纲挈领的介绍性文档,后面会以此展开,逐渐丰富. 1. 前言 在 <开发流程>中介绍了PM开发的一般流程,重点是好的模型.简单有效的接口参数.可量化的测试环境以及可独性强的输出 ...
- Linux驱动开发必看详解神秘内核(完全转载)
Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入L ...
- 【驱动】linux下I2C驱动架构全面分析
I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...
- linux下I2C驱动架构全面分析【转】
本文转载自:http://blog.csdn.net/wangpengqi/article/details/17711165 I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一 ...
随机推荐
- POJ:2566-Bound Found(尺取变形好题)
Bound Found Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5408 Accepted: 1735 Special J ...
- 大话循环神经网络(RNN)
在上一篇文章中,介绍了 卷积神经网络(CNN)的算法原理,CNN在图像识别中有着强大.广泛的应用,但有一些场景用CNN却无法得到有效地解决,例如: 语音识别,要按顺序处理每一帧的声音信息,有些结果 ...
- Android 数据库的线程合作
前言:之前琢磨了很多线程相关的东西,一直摸不着头脑,直到学到了数据库,终于发现世界原来如此美好,任何事物都有存在的理由. 1.主线程,我把它比作长江,作为母亲河的长江,想必大家每个人都不会很陌生. 2 ...
- HTTP的缓存控制
1.缓存的分类: (1)缓存分为服务端侧(server side,比如 Nginx.Apache)和客户端侧(client side,比如 web browser). (2)服务端缓存又分为 代理服务 ...
- ceph 存储系统
http://w w w.c s d n 123.com/html/topnews201408/2/4702.htm
- 【java下午茶系列】java三重奏之封装
java中的封装.继承.多态可谓是踏入这一行业的必经之槛,诸多新人在不明就里的情况下将其各种概念背的是滚瓜烂熟.即便是工作多年之后,也不见得能说出个所以然,或许冥冥之中已经写过无数封装的代码,只是 ...
- sources.list
deb http://debian.ustc.edu.cn/ubuntu/ precise main multiverse restricted universe deb http://debian. ...
- JavaScript里面的面向对象
1.JavaScript里面没有类,但是利用函数可以起到类似的作用,例如简单的构造方法,跟Python差别不大 function f1(mame,age){ this.Name = name; thi ...
- Struts2 学习笔记
1)Strust2是以WebWork为核心,采用拦截器的机制对用户请求进行处理. 2)Struts2框架结构: 3)简单来看整个Struts2的处理过程可以简单的理解为 用户的请求发送给对应的Acti ...
- python os操作
大家先看一下Python os模块中的部分函数 python 路径相关的函数 os.listdir(dirname):列出dirname下的目录和文件 os.getcwd():获得当前工作目录 os. ...