1992 年,那是一个春天。不过其实 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 大侠对我们的问题的耐心解答与回复。