博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】
阅读量:5870 次
发布时间:2019-06-19

本文共 1102 字,大约阅读时间需要 3 分钟。

转自:

嵌入式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那点事儿(大家嫌麻烦可以到我这里下载),ldd3,最好的资料是源代码。

转载地址:http://kcxnx.baihongyu.com/

你可能感兴趣的文章
123
查看>>
字符串学习笔记
查看>>
32位和64位的操作系统的差异
查看>>
SVN 分支建立 和 合并
查看>>
Java 中的 Integer 和 int 学习笔记
查看>>
OpenWRT开发之——目录分析与make过程
查看>>
连接收藏
查看>>
Android上传图片裁剪功能
查看>>
redis常用的命令
查看>>
jsrender demo
查看>>
C语言学习笔记之获取文件长度
查看>>
12.1 LNMP架构介绍 12.2 MySQL安装12.3/12.4 PHP安装 12.5 Nginx介绍
查看>>
iOS中perform+@selector多参数传递
查看>>
Mysql列类型:日期时间型
查看>>
java 编程中的非空判断怎么加才优雅?
查看>>
yum源修改
查看>>
tensorflow源码安装教程
查看>>
export table data in to Excel using jQuery
查看>>
Activiti通过API动态创建流程
查看>>
List集合排序
查看>>