Linux那些事儿之我是USB

出版时间:2010-7  出版社:肖林甫、肖季东、 任桥伟 电子工业出版社 (2010-07出版)  作者:肖林甫 等 著  页数:563  
Tag标签:无  

前言

1991年,Linux诞生了。又因为开放源代码的缘故,十几年来Linux是越来越火,熊熊火焰也烧到了华夏大地。诸多高校开始开设Linux相关的课程,诸多企业开始招聘Linux相关的人才。市面上关于Linux的书籍也层出不穷,而这其中大致分为两类,一类是应用方面的书籍,比如介绍如何组建各种服务器;另一类是内核方面的书籍,主要都是对内核源代码进行分析,这方面的书籍则以《Linux设备驱动程序》和《深入理解Linux内核》为经典代表。而从眼下国内的人才市场来看,懂Linux内核的人找工作肯定不用发愁。事实上,不夸张地说,当代大学生,如果能够看完以上这两本书,并且能够看懂,那么在北京、上海、深圳这些一线城市,很容易就能找到一份体面的技术类工作。 那么为什么我们还要另起炉灶再写一本Linux内核方面的书籍呢?因为Linux内核包含大量的代码,以上面两本书为代表的很多Linux内核的书籍涵盖的内容太广,大多数书籍都是把Linux内核中的各个部分逐一地进行介绍和分析,然而实际情况是没有任何一个人能够对Linux内核的各个部分都很精通,包括Linus Torvalds本人。一个对Linux开发感兴趣的人也不一定需要并且有足够的时间对Linux的每个部分都去深入理解。而另一方面,很多对Linux内核感兴趣的朋友常常被一个问题所困扰,那就是Linux内核那么庞大的代码量,对于初学者来说,应该从哪里学起呢?关于这一点,其实《Linux设备驱动程序》给出了很好的答案,学习驱动程序代码是最有效的入门方法。第一是因为在庞大的Linux内核源代码中,大约87.53%是各种驱动程序代码,其重要性可想而知,第二是因为相比较来说,驱动程序的代码其难度是比较低的,很少涉及复杂高深的算法,所以适合初学者研读。 然而网友“永不堕落”曾经问过我们:“既然已经有了《Linux设备驱动程序》,为什么你们还要写一本Linux设备驱动程序相关的书呢?你们这样做是不是行为艺术呢?”这里我们想说的是,虽然《Linux设备驱动程序》这本书很强大了,把各种类型的设备驱动程序都给介绍了一番,可是当一些读者读完这本书之后,他们敢说自己会写Linux设备驱动程序了吗?他们敢说自己完全了解一个真实的Linux设备驱动程序是怎么写的吗?至少本书作者当年在看完这本书之后,虽然觉得获益匪浅,可是仍然不太清楚真实的Linux设备驱动程序是怎么写的,仍然不敢认为自己就会写Linux设备驱动程序了。这才有了后来决定亲自选择一个子系统进行研究,并在研究好了之后把研究心得写出来,与大家进行分享。最终我们选择的是USB子系统,原因很简单,USB总线及连接在USB总线上的各种USB设备已经广泛地出现在了当代计算机上,广大计算机用户,尤其是高校学生,接触得最多的设备也正是USB设备,所以研究和分析USB总线,以及它上面的各种USB设备应该能让大家感到很亲切很真实并且具有相当的实用价值和怀旧意义。有人曾经说过:“USB总线就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤!” 本书的编写得到了许多人的帮助,在此向他们致以诚挚的谢意。首先感谢孙学瑛编辑,没有她的努力,这本书的内容将会一直偏居网络一隅,将不可能被出版从而去帮助更多需要的人。然后要感谢很多在技术上给予我们指导与帮助的老师和朋友,特别是USB这边的maintaner之一,Alan Stem大侠对我们的问题的耐心解答与回复。

内容概要

  《Linux那些事儿之我是USB》基于2.6.22内核,对USB子系统的大部分源代码逐行进行分析,系统地阐释了Linux内核中USB子系统是如何运转的,子系统内部的各个模块之间是如何互相协作互相配合的。《Linux那些事儿之我是USB》使用幽默诙谐的笔调对Linux内核中的USB子系统源代码进行了分析,形象且详尽地介绍了USB在Linux中的实现。《Linux那些事儿之我是USB》从U盘、Hub、USB Core直到主机控制器覆盖了USB实现的方方面面,被一些网友誉为USB开发的“圣经”。  对于Linux初学者,可以通过《Linux那些事儿之我是USB》掌握学习内核、浏览内核代码的方法;对于Linux驱动开发者,可以通过《Linux那些事儿之我是USB》对设备模型有形象深刻的理解;对于USB开发者,可以通过《Linux那些事儿之我是USB》全面的理解USB在一个操作系统中的实现;对于Linux内核开发者,也可以通过《Linux那些事儿之我是USB》学习到很多Linux高手开发维护一个完整子系统时的编程思想。

书籍目录

第1篇 Linux那些事儿之我是USB Core1.引子 22.它从哪里来 23.PK 34.漫漫辛酸路 35.我型我秀 46.我是一棵树 57.我是谁 98.好戏开始了 119.不一样的core 1310.从这里开始 1711.面纱 2012.模型,又见模型 2213.繁华落尽 2614.接口是设备的接口 2815.设置是接口的设置 3216.端点 3517.设备 3718.配置 4519.向左走,向右走 4820.设备的生命线(一) 5321.设备的生命线(二) 5622.设备的生命线(三) 6123.设备的生命线(四) 6724.设备的生命线(五) 7325.设备的生命线(六) 8026.设备的生命线(七) 8827.设备的生命线(八) 9428.设备的生命线(九) 10029.设备的生命线(十) 10430.设备的生命线(十一) 10931.驱动的生命线(一) 12232.驱动的生命线(二) 12733.驱动的生命线(三) 13134.驱动的生命线(四) 13535.字符串描述符 13836.接口的驱动 14737.还是那个match 15038.结束语 155第2篇 Linux那些事儿之我是HUB1.引子 1572.跟我走吧,现在就出发 1573.特别的爱给特别的Root Hub 1584.一样的精灵不一样的API 1605.那些队列,那些队列操作函数 1646.等待,只因曾经承诺 1697.最熟悉的陌生人——probe 1718.蝴蝶效应 1749.While You Were Sleeping(一) 17810.While You Were Sleeping(二) 18311.While You Were Sleeping(三) 18512.While You Were Sleeping(四) 19113.再向虎山行 19414.树,是什么样的树 19815.没完没了的判断 20116.一个都不能少 20617.盖茨家对Linux代码的影响 21518.八大重量级函数闪亮登场(一) 22019.八大重量级函数闪亮登场(二) 22320.八大重量级函数闪亮登场(三) 22521.八大重量级函数闪亮登场(四) 23722.八大重量级函数闪亮登场(五) 24123.是月亮惹的祸还是spec的错 24924.所谓的热插拔 251第3篇 Linux那些事儿之我是UHCI1.引子 2562.开户和销户 2583.PCI,我们来了! 2624.I/O内存和I/O端口 2705.传说中的DMA 2756.来来,我是一条总线,线线线线线线 2817.主机控制器的初始化 2858.有一种资源,叫中断 2939.一个函数引发的故事(一) 29510.一个函数引发的故事(二) 29811.一个函数引发的故事(三) 30312.一个函数引发的故事(四) 30913.一个函数引发的故事(五) 31114.寂寞在唱歌 31315.Root Hub的控制传输(一) 32116.Root Hub的控制传输(二) 32717.非Root Hub的批量传输 33918.传说中的中断服务程序(ISR) 34519.Root Hub的中断传输 36220.非Root Hub的中断传输 36421.等时传输 37522.“脱”就一个字 381第4篇 Linux那些事儿之我是U盘1.小城故事 3882.Makefile 3893.变态的模块机制 3904.想到达明天现在就要启程 3925.外面的世界很精彩 3946.未曾开始却似结束 3957.狂欢是一群人的孤单 3968.总线、设备和驱动(上) 3979.总线、设备和驱动(下) 39810.我是谁的他 40011.从协议中来,到协议中去(上) 40112.从协议中来,到协议中去(中) 40313.从协议中来,到协议中去(下) 40514.梦开始的地方 40615.设备花名册 41116.冰冻三尺非一日之寒 41217.冬天来了,春天还会远吗?(一) 41618.冬天来了,春天还会远吗?(二) 42219.冬天来了,春天还会远吗?(三) 42520.冬天来了,春天还会远吗?(四) 42721.冬天来了,春天还会远吗?(五) 43122.通往春天的管道 43623.传说中的URB 44024.彼岸花的传说(一) 44325.彼岸花的传说(二) 44526.彼岸花的传说(三) 44827.彼岸花的传说(四) 45128.彼岸花的传说(五) 45329.彼岸花的传说(六) 45730.彼岸花的传说(七) 46031.彼岸花的传说(八) 46332.彼岸花的传说(The End) 46733.SCSI命令之我型我秀 46834.迷雾重重的批量传输(一) 47235.迷雾重重的批量传输(二) 47636.迷雾重重的批量传输(三) 47937.迷雾重重的批量传输(四) 48438.迷雾重重的批量传输(五) 48939.迷雾重重的批量传输(六) 49340.迷雾重重的批量传输(七) 49541.跟着感觉走(一) 50042.跟着感觉走(二) 50343.有多少爱可以胡来?(一) 50944.有多少爱可以胡来?(二) 51345.当梦醒了天晴了 51846.其实世上本有路,走的人多了,也便没了路 522附录 Linux那些事儿之我是sysfs1.sysfs初探 5262.设备模型 5273.设备底层模型 5284.设备模型上层容器 5325.示例一:usb子系统 5356.示例二:usb storage驱动 5417.sysfs文件系统 5478.文件系统 5479.sysfs 55310.file_oprations 55811.示例一:读入sysfs目录的内容 55812.示例二:读入sysfs普通文件的内容 561

章节摘录

插图:我们可以知道struct device中的bus表示这个设备连到哪个总线上,driver表示这个设备的驱动是什么。struct device-driver中的bus表示这个驱动属于哪个总线,klist-devices表示这个驱动都支持哪些设备,因为这里device是复数,又是list,更因为一个驱动可以支持多个设备,而一个设备只能绑定一个驱动。当然,structbus-type中的drivers和devices分别表示了这个总线拥有哪些设备和哪些驱动。我们还需要看一看什么是klist和kset。还有上面device和driver结构中出现的kobiect结构是什么?我可以肯定地告诉你,kobject和kset都是Lnux设备模型中最基本的元素,总线、设备、驱动是西瓜,kobjcet、klist是种瓜的人,没有幕后种瓜人的汗水不会有清爽解渴的西瓜。我们不能光知道西瓜是多么的甜,还要知道种瓜人的辛苦。kobject和kset不会在意自己的得失,它们存在的意义在于把总线、设备和驱动这样的对象连接到设备模型上。种瓜的人也不会在意自己的汗水,在意的只是能不能种出甜蜜的西瓜。一般来说应该这么理解,整个Linux的设备模型是一个00的体系结构,总线、设备和驱动都是其中鲜活存在的对象,kobject是它们的基类,所实现的只是一些公共的接口,kset是同种类型kobject对象的集合,也可以说是对象的容器。只是因为c语言里不可能会有C++语言里类的class继承、组合等的概念,只有通过kobject嵌入到对象结构中来实现。这样,内核使用kobject将各个对象连接起来组成了一个分层的结构体系。kobiect结构中包含了parent成员,指向了另一个kobject结构,也就是这个分层结构的上一层结点。而kset是通过链表来实现的,这样就可以明白,struct bus_type结构中的成员drivers和devices表示了一条总线拥有两条链表,一条是设备链表,一条是驱动链表。我们知道了总线对应的数据结构,就可以找到这条总线关联了多少设备,又有哪些驱动来支持这类设备。

媒体关注与评论

牛人,读罢你们的文字,对Linux顿感兴趣。   ——网友uspark 博主这么多优秀文章,真是让我吃了N顿饱餐啊哈~可惜发现得太晚,要是在3年之前就看到多好~   ——网友sunwill_chen  第一次看的是U盘部分,硬着头皮看完了55个小节,现在来看PCI部分,有种一通百通的感觉,非常不错!  ——网友haierfox 过来拜一个,这几天一直从头看博主的“Linux那些事儿”,我就一直在纳闷,什么神人才能把复杂枯燥的驱动写得那样华丽,那样搔首弄姿,那样让人欲罢不能……   ——网友windwinter 有一种文章,看了直犯困,有一种文章,越看越兴奋,博主你咋这么让人兴奋呢?   ——网友phoenix_zhang 毕业设计是USB设备驱动,看了那个USB Core简直胜过看所有的书啊。把所有自己不清楚的内容都说明白了,无限膜拜中……   ——网友rabbit8ge 第一眼看到楼主的文章,立刻就被吸引了,诙谐的语言让人看起技术文章来感觉不到枯燥,楼主不去做老师真是浪费,现在的老师没有几个能让人听课不瞌睡的。   ——网友likefreebird 在过度疲劳的工作中看到楼主的文章,失笑了多回。虽然没太懂,也没来得及看完。我借助它解决了SCSI设备号固定于硬端口的问题。赞一个:是金子总是要发光的。   ——网友yzdai 刚看了几眼你的文章就喜欢上了,很喜欢你的文风。现在的书要是文字都这么轻松该多好啊!感谢你为全人类做出的贡献!   ——网友Felk2005  非常喜欢您关于USB开发的几部经典作品,用超乎寻常的经典方式学习、解剖经典的技术。   ——网友learner太经典了,花了4天时间终于看完了,这是我看过的最好的技术文章!   ——网友raindown 我也是因为工作缘故开始使用Linux开发程序,接触有半年多,期间一直只是用GCC编写程序,觉得跟WIN平台比,从应用程序开发的角度来看,并不需要跨越多么大的鸿沟,所以始终没有阅读Linux内核代码的动机。 以前做过USB设备端的驱动程序,对USB协议有所了解。但我知道对于设备驱动程序开发来说,Linux与WIN平台的区别相当大。在看本书的过程中,越来越强烈地感觉到,这真的是一本妙趣横生的惊艳大作!我一口气用了4个钟头左右的时间从头到尾看完,一直看到凌晨2点多。我觉得这是我迄今为止看过的最有意思的技术类书籍,甚至年少时期狂热爱的科普类书籍也赶不上本书风格的九牛一毛。   ——网友zlzdsp

编辑推荐

《Linux那些事儿之我是USB》:技术凝聚实力,专业创新出版

图书封面

图书标签Tags

评论、评分、阅读与下载


    Linux那些事儿之我是USB PDF格式下载


用户评论 (总计8条)

 
 

  •   哈哈~,从来没看过这么有趣的书,真是开技术写作的先河了,要是每本技术书都这样写就好了~
  •   双向链表..还有队列..其实链表真的很好用..虽然我很初级..但是..用起来感觉真的很好~~~至少没有限制~~哈...
  •   作者以玩的心态教读者一步一步的深入USB的内在,内容很适合想学USB驱动的人。
  •   这本书在作者的csdn上有发表,我想现在出版社,真会赚钱,从网上找一些的经典的博文,就可以搞成书了。
  •   感觉像正版的,纸质不错,看了几十页还没发现错字。就是配货过程太慢了~
  •   书中错误很多,删掉了出版社认为原著中的一些“废话”,变得十分生硬,不连贯!就连章节名UHCI都写错,好像写成了UCHI!!!而且是那一章的页眉上每一页都是错误的,出版社实在是太不负责任了!不建议购买,建议直接下PDF,写的生动有意思!
  •   做工还是很不错的,比我现在的Y470强很多,Win8系统也还行,挺满意的。
  •   让人越看越精神,什么是神作,这就是~
 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7