免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7686 | 回复: 16

《linux那些事之我是USB》读书笔记 [复制链接]

论坛徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
发表于 2010-10-14 11:33 |显示全部楼层

Linux驱动终于可以暂告段落了!

缓口气!

前面一直抱着本书和宋宝华老师的驱动详解在看,中间过程中也是一直在两本书上翻来翻去,因为看书和动手真的是两回事,书上看明白是很简单的事情,但是真正操练的时候,会发现,原来从书上看明白的只是一些大道理,书上讲的一些细节或者没看明白,或者没记住,反正到实际操练的时候,肯定还是会有很多事情让你纠结的。

本来上半年一个比赛打算用USB摄像头的,当时急急忙忙的把USB协议过了一遍,后来发现淘宝上有一种接口的CMOS模块比USB摄像头用起来更简单,于是放弃了USB摄像头。在那之前我一直认为USB很神秘、很复杂,很难很难,但是看完书后,发现其实也不是传说中的那么难。后来暑假去深圳,便打算好好搞一下USB驱动。当时主要是考虑做linux端的,但是后来又发现linux里边支持的几种标准USB设备,还涉及到其他一些协议,太复杂了。然后才意识到,想吃透USB也不是简单的事情。当时为这个事情纠结了很长时间,怎么样找一个简单一点、可操作性强一点、又比较典型的东东来实验了?!手头有块BF533的板子,上面有USB host和usb device的芯片,BF533外置的,还有一片N年前买的2410的开发板,还有一个论坛赢得的一块STM32开发板(还没到手,原先以为11之前能到的,到现在还没到手,还要等几天),还有就是一哥们前面在组织USB逻辑分析仪DIY活动用的68013。533由于手头的一个仿真机不好使,而且例程里边的代码仅仅有个芯片检测,别的都没有,也没什么好参照的;STM32还没到手,也不知道要等到什么时候;68013问了下那哥们,结果那哥们告诉我host驱动更有意思,不知所云;2410本人以前自己弄了一个基于uboot引导的小程序,可以用于调试,代码写好用uboot down到SDRAM里边,然后go过去就可以执行的。想来想去还是这个最合适,于是翻出2410 datasheet开始研究(话说好几个月没摸2410了,生疏了不少啦,嘿嘿)。

闲话扯远了貌似,哈哈,下面言归正传!

USB协议看得差不多的时候,刚好在CU看到本书试读活动,哈哈,好机会岂容错过,赶紧跟帖发了申请,没想到居然把俺抽上了,机缘巧合,俺赶的太巧啦。再扯点题外话,看USB协议是为了打发从北京到深圳火车上的26个多小时里边的一大半时间的无奈之举,没想到效果还不错,要搁学校,我估计10个26小时也看不了那么多内容,哈哈。

从USB协议,到USB驱动,中间的路其实还很坎坷的。本人接触linux驱动时间也不是太长,之前对linux驱动的架构也不太清晰,基本的字符设备驱动倒是会写。分析完USB协议之后,便想着手linux端驱动的编写,此时有一个问题困惑了俺老长一段时间:USB设备的设备文件怎么生成?设备文件操作该如何处理?为这个问题,我到处想找个合适的USB驱动例子来学习一下,结果发现很多都是用的USB主设备号,就是major = 180,然后增加一个次设备号的做法,我觉得这样不爽,但是又不知道更好的办法是什么,纠结了N天也没找到答案。11前两天,貌似9月28号吧,同学告诉我收发室有我的挂号信,我当时还纳闷哪儿来的挂号信了,没想到去了一看,《linux那些事之我是USB》来啦。嗨,当时正等这本书嘞,结果花了两天时间把USB CORE和U盘翻了一遍过来,感觉东西有点多,没理解过来,又翻了一遍,感觉有点意思了,明白了USB host底层如何进行的一些操作,但是还是没找到我要的答案啦:设备文件的事,怎么没讲linux那些事之我是USB设备文件啦?!然后又把驱动详解拿出来看,这才找到答案,然后回头一想,原来只顾看书了,其中的精华根本没提取出来。书中一遍又一遍的在讲解设备和接口的区别(P8,P28…),接口才是驱动单元驱动的对象,但是接口本身不是设备,linux里边的设备只有3类,字符,块,网络,其中是不包含接口的,也就是说没有接口的设备驱动(是不是接口驱动更合适?哈哈,无所谓啦,反正也是不存在的东东)这么一说,而USB本身却只是一个接口!!!我们要编写的设备驱动是只能有3种形式,要么是字符设备的驱动,要么是块设备的驱动,要么是网络设备的驱动。我们的USB设备属于哪一种了?哈哈,书中有云:“坦白地说,大多数USB设备都会与input、video等子系统关联,并不单单只是作为USB设备而存在。如果US……”(详见P31)这里我就不抄书啦,避避嫌。这才让人恍然大悟。USB接口的设备有该设备本身的属性,USB只是其与系统连接的接口而已,至于其访问方式是字符型,还是块类,这个跟USB接口是没有任何关系滴,只与这个USB接口的设备本身有关。那么对应在系统中的设备文件依然还是像普通字符设备或者块设备一样来创建设备文件以及访问啦。

到这里肯定有人会疑惑,那设备本身是字符或者块类型的,又如何与USB联系了?我要说的是,USB相对于这些设备本身来说,就像花姑娘的小外套。花姑娘不管穿什么外套,都改不了她是花姑娘的本质,不可能因为穿着马甲是花姑娘,而改穿风衣后就成老爷们啦。所以了,我们要做的就是给这些USB接口的字符设备或者块设备的驱动在字符设备或块设备驱动本身再加个小外套,至于这个小外套,哪件合适了?哈哈,当然是usb_driver这个外套最合她那妖娆的身段啦。

同时,这里可以联系一下设备模型。对了,说到设备模型,本书也觉得是值得大家赞许之作。里边讲设备模型讲的太形象、太生动啦,不仅讲了设备模型的原理,而且通过联系USB设备,引申出设备模型的应用,让人茅塞顿开。本人之前看了LDD3里边讲关于设备模型的章节,看了3、4遍也没弄清楚到底是怎么回事,曾经一度怀疑自己是否适合玩linux驱动。那里边也讲kobject等等的东西,而本书也讲这些,只是本书还有点睛之作,见P25,把bus和driver的联系以及device,讲的非常浅显,不论懂不懂linux驱动架构,这几句话都是一看就明白,再结合代码里边的包含关系一看,感慨的仅仅会是:“哦,原来设备模型是这么回事呀!”其实可不是这样么?usb core会用bus_register()首先注册一条USB总线,然后所有的设备都将通过hub挂到该总线上来(假设硬件系统只有一个usb host)。至于在linux里边如何编写驱动来让设备工作,那关系可以用比较简单的话来概括,首先要有USB设备的两个ID,然后得有usb_driver,还得有probe何disconnect,有了这些,USB接口的设备中的USB接口就可以在插入系统时,让系统知道他来了。然后usb core会生成一个usb_device(貌似是usb_interface。这个还没弄清楚到底怎么回事,还得再翻翻书,如果有误,欢迎指正),然后根据其ID,来查找usb bus上的usb_driver中的id_tables,看到底哪个驱动是专门为这个设备准备的。如果ID匹配上了,系统就讲他们绑定,然后便可以通过设备文件来来操作时机硬件了。至于硬件到底怎么操作,那得看通过USB总线传输的数据,USB设备和host都是拿来如何处理,在USB设备驱动中,我们其实只要将数据按协议规定写入和读出即可,至于数据到底怎么用,那是应用程序以及设备中的固件层上面的应用程序的事情啦,驱动就不必操太多的心了,只要不把设备本身的数据格式搞乱就OK。

这本书内容虽然多,但是确实都是精华,字字珠玑不敢说,但是里边的经典字句确实随处可见。通过此书,我们不仅仅能发现驱动编写并非难事,更能看出著书者的深厚功底,无论技术,还是文字运用。能把别人花很长时间看不明白的东西,写的言简意赅,确实值得赞赏和推崇。

这是本人近一个多月来做USB驱动的一些心得,也算是对于此书的一个简短的读书笔记,虽然闲话扯的有点多。这本书后面我还会再认认真真的研读的,因为到目前为止,还没把这本书的价值全部榨取干净。

论坛徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
发表于 2010-10-14 11:34 |显示全部楼层
嘿嘿,沙了发先

论坛徽章:
0
发表于 2010-10-14 11:40 |显示全部楼层
我也想看看 可惜没有书咯

论坛徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
发表于 2010-10-14 11:41 |显示全部楼层
另,附上本人的源代码,里边有注释和相关说明

吃饭啦,嘿嘿

吃饭先

usb.tar

80.46 KB, 下载次数: 258

论坛徽章:
0
发表于 2010-10-15 10:14 |显示全部楼层
不错。

论坛徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
发表于 2010-10-15 16:58 |显示全部楼层
多谢多谢,呵呵,终于有人顶帖啦

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
发表于 2010-10-18 09:37 |显示全部楼层
不知道这本书如何,《Linux内核修炼之道》感觉有点失望

论坛徽章:
379
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
发表于 2010-10-18 09:46 |显示全部楼层
楼主写的不错,把帖子再排下版就更好了

论坛徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
发表于 2010-10-18 14:35 |显示全部楼层
多谢多谢啦

8L排版有何见教?我是刚好搞USB驱动的时候赶上活动啦,而且顺利申请到一本,这本书对我的帮助真的很大,现在还在看,因为前面调驱动的时候太顺利,很多细节问题也没来得及多看多想

论坛徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
发表于 2010-10-18 14:37 |显示全部楼层
不知道这本书如何,《Linux内核修炼之道》感觉有点失望
dreamice 发表于 2010-10-18 09:37



    内核修炼之道我觉得更适合新手入门,对你这样的大牛来说基本起不了什么用啦

我当初也是对内核修炼之道报着很高的期望,后来弄到书(不是本人买的,托一家媒体的一个美女编辑帮忙弄的一本)以后,发现跟俺所想相去甚远
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

基于案例的 SQL 优化实战训练营

讲师:中电福富特级专家梁敬彬,参与本次课程培训,你将收获:
1. 能编写出较为高效的 SQL;
2. 能解决70%以上的数据库常见优化问题;
3. 能得到老师提供的高效的相关工具和解决方案;
4. 能举一反三,收获不仅仅是 SQL 优化。
现在购票享受8.8折优惠!
----------------------------------------
优惠时间:2019年3月20日前

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP