嵌入式linux下usb驱动开发方法--看完少走弯路
2010-07-05 17:23
337 查看
嵌入式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,最好的资料是源代码。
需要资料的朋友可以给回复留言,我可以发给大家,我库里一堆资
料,我喜欢看电子版的,所以如果你也和我一样喜欢看电子书籍的话,我很乐于奉献的哦~~
本
人做过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下usb驱动开发方法--看完少走弯路
- 转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】
- 嵌入式linux下usb驱动开发方法--看完少走弯路
- 嵌入式linux下usb驱动开发方法--看完少走弯路
- 嵌入式linux下usb驱动开发方法--看完少走弯路
- 使用eclipse 开发 嵌入式Linux驱动(注意事项)(make:***没有规则可言创建目标"all".停止 的解决方法)
- 基于嵌入式linux的usb摄像头的驱动及采集程序的实现
- linux下USB驱动开发
- USB驱动开发中真正GUID的获得方法图解
- 嵌入式Linux之我行——S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
- linux ---------驱动开发遇到的问题及解决方法
- arm+linux下usb驱动开发,移植Libusb以及开发应用调试过程
- 嵌入式Linux音频驱动开发
- USB驱动开发之远程访问USB设备扩展(linux平台USB设备数据采集端)
- Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- 嵌入式Linux设备驱动开发课程-宋宝华
- Linux系统下USB摄像头驱动开发
- 嵌入式Linux驱动开发-突然发现自己是新手
- Linux下的硬件驱动——USB设备(下)(驱动开发部分)