转: 嵌入式linux下usb驱动开发方法--看完少走弯路
2010-08-25 18:09
375 查看
嵌入式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+ARM学习之win10下mini2440 USB驱动安装(小白)
- 嵌入式驱动开发的前期Linux 和 C学习(三)
- VirtualBox下安装已经配置好Linux驱动开发环境的Ubuntu系统的方法
- 嵌入式Linux设备驱动开发课程-宋宝华
- Linux环境下USB的原理、驱动和配置--本文由CSDN 特别约稿,作者为北京中科红旗软件技术有限公司 嵌入式工程师 梁国军
- Linux USB 驱动开发(五)—— USB驱动程序开发过程简单总结
- 嵌入式Linux驱动开发-突然发现自己是新手
- 嵌入式Linux USB WIFI驱动的移植
- linux嵌入式驱动软件开发(csdnblog)
- 【嵌入式Linux驱动开发】三、字符设备驱动(二)
- 在线读书——孙天泽(嵌入式设计及Linux驱动开发指南——基于ARM9处理器)
- Linux USB 驱动开发-USB设备基础概念
- 嵌入式linux平台设备驱动(设备驱动模型)开发之linux内核中bus总线