Embedded 版 (精华区)
发信人: Thinkpad (船长), 信区: Embedded_system
标 题: Linux设备驱动程序(LDD)-前言(zz)
发信站: 哈工大紫丁香 (Sun Jun 24 15:14:49 2001) , 转信
发信人: dot (爱吃萝卜和青菜), 信区: Embedded
标 题: (LDD) Ch00-前言
发信站: 武汉白云黄鹤站 (2001年06月16日14:05:49 星期六), 站内信件
序
作为一名电子工程师,而且是一个什么都想自己做的人,我一向愿意用计算机来控制外
部设备。甚至还在我们父辈的Apple-2e时代,我就已经开始寻找别的平台,希望可以与
我定制的环境相连,并且可以写我自己的驱动程序软件。不幸的是,八十年代的个人电
脑并没有那么强大,不论在软件层还是硬件层上,个人电脑的内部设计都远不如Apple-2
e,并且在很长一段时间内,可以获得的文档都不能令人满意。但是,接着发生的事是Lin
ux出现了,我决定试一试,于是买了昂贵的386主板,并且没有跑任何商业软件。
那时侯,我正在大学里使用Unix系统,并为这样聪明的一个操作系统所震动,特别是又
补充了GNU计划提供给用户的更智慧的工具后,我更是为Unix所深深陶醉。在我自己的个
人电脑主板上跑Linux实在是一个有趣的经历,我甚至可以自己写设备驱动程序,而且又
可以玩烙铁了。我不断告诉别人:“当我长大了,我一定会是个黑客”,Linux是实现这
个梦想的绝佳平台。这就是说,用不着长大我就可以实现梦想了。
当Linux成熟起来以后,越来越多的人对写特制电路的设备驱动程序和商业设备的驱动程
序感兴趣了。正如Linus Torvalds告知大家:“我们退回到这样一个时代——人人都为
自己写设备驱动程序。”
当我不能再写出有创意的编码以后,我就开始为Linux Journal写一些技术性文章了,这
也算是为Linux社团的一点贡献吧。后来,O’Reilly的 Andy Oram有意让我编写一本讲
设备驱动程序的书,我接受了这个任务。尽管,真正的黑客可以在正式发布的内核代码
中找到所有必要的信息,但是写出来的文本对提高编程技巧还是有用的。你拿到的这个
东西是我花几小时的时间对内核资源耐心grep的结果,我希望最后的结果对得起我的努
力。如果本书能作为那些想成为内核黑客又不知道从何下手的人的一个起点的话,就足
以达成我的愿望了。
本书读者
从技术角度来讲,本书应该提供唾手可得的途径去理解内核内幕以及Linus本人在开发时
所做的设计抉择。尽管本书的主要目的是教如何写设备驱动程序,但它所包容的内容应
该也对内核的执行给出一个完整的概貌。
对那些想玩电脑的人和那些涉及Linux机器的内部的专业程序员来讲,本书都会是一个很
有趣的资料来源。注意:“Linux机器”这个概念比“跑Linux的PC”这个概念还要广泛
,因为我们的操作系统支持很多平台,而且内核编程也不局限于某一种平台上。
Linux的狂热支持者会发现本书提供了大量的精神食粮。开始可以玩一玩编码,然后就可
以加入到开发者小组中了,他们可是在孜孜不倦地工作以提供新的功能,提高系统性能
。Linux仍处在不断完善的过程当中,并且总能为新加入的程序员提供新的空间。
换句话说,如果你只是想给你自己的设备编一个设备驱动程序,而不想在内核内幕上下
什么工夫,本书的模块化结构也绝对可以满足你的要求。如果你不想深入细节,你可以
跳过大多数技术章节,而直接查找设备驱动程序的标准API,它们与系统的其他部分是无
缝连接的。
本书主要目的是为Linux 2.0写一个内核模块。模块是对象代码,可以在运行的内核中动
态加载新功能。讨论也会涉及到1.2版本的内核。最后一章描述从2.0到2.1.43(在本书
进行技术回顾时的最新版本)的驱动程序接口的变化。
材料的组织
本书介绍的主题会越来越复杂,它们可以分成两个部分。第一部分(第1章到第10章)从
内核模块的正确安装开始介绍,会涉及到写字符设备驱动程序需要面对的各方面的问题
。每章会讨论一个独立主题,并且在末尾包含一个“符号表”,在实际开发时,可以用
作参考。当我写自己的设备驱动程序时,我发现我会回头去查自己写的章节,我希望你
也可以充分利用这个符号表。
贯穿本书第一部分材料的组织方式大致是从面向软件到面向硬件。这意味着你可以在没
有附加设备的情况下在你的机器上测试软件。每章都包含源代码,并指出可以使用的驱
动程序的例子,这些例子在所有Linux机器上都可以实现。在第8章和第9章,我会要求你
在并口上连一根金属线,用来测试一下硬件,但这种要求对所有人来讲都是很容易实现
的。
本书第二部分描述了一些块设备驱动程序,和网络接口,以及更进一步的深入讨论。很
有可能,这里讨论的大部分东西在你写实际驱动程序中用不到,但我希望第一部分能够
引起足够兴趣来阅读第二部分。
事实上,我罗列的大部分材料都很有意思,而且与实际编写设备驱动程序时需要的材料
没有什么关系。在我写这本书的时候,很多学生就他们的需求问了我一些关于Linux的问
题。他们一定很高兴看到这些章节对他们的工作有帮助,即使他们的工作与编写驱动程
序无关。
背景信息
要想阅读本书,应该熟悉C语言编程。也要有点Unix的专业知识,例如我会经常提到Unix
命令和管道。
在硬件层,不需要预先的专业知识,前提只要求总体概念清晰就可以了。本书不基于什
么特殊的PC硬件设备,而当我用到什么特殊设备的时候,我会提供所有相关信息。
如果能够连接到互联网上,读者可以享受很多便利,因为从网络上可以获得很多新鲜有
趣的文档和升级软件。当然,有上网条件并不是必须的,我自己上网条件就很破(主要
得托Italian电话通讯公司快速网络速度的福)。
只要一涉及到软件,你就需要安装Linux系统了,这样就可以运行例子的驱动程序。注意
,任何发布版本都可以使用(并且所有的硬件平台也都适用)。我在第一章就完整地列
出了所需软件包的清单,因为如果放到‘序’中,很多读者会漏掉这些信息。(我希望
能有很多人可以跳过第一章;大多数读者不都是黑客吗?)
深入信息来源
本书中涉及的大多数信息都是直接取材于内核的。只要你的系统上装了Linux,就几乎不
需要什么文档来做补充。在写设备驱动程序时,几乎没有什么富有趣味的书可供参考,
而主要信息来源就是内核的源代码和你设备的技术文档。不用再说什么了,你应该很感
激描述你机器平台的手册。
至于了解内核内部机制的工作,最好的信息来自互联网(仅次于源文件)。Linux
Journal也有一些有趣的技术性文章。查看“内核之角”(kernel Korner)卷,但跳过我
的文章——因为我可能重复自己;没有内核之角标识的文章实际上也挺有意思,但是一
般技术性没有本书读者要求的那样高。
在互联网上,我建议查找下面网址:
http://www.redhat.com:8080/
小红帽上的超新闻(HYPERNEWS)服务器提供‘内核黑客指南’,这是关于内核内幕的很
有趣的文档。其中的一些章节已经很老了,但是最近更新了其中一部分东西。按照我的
观点,这些材料相当有趣。
http://www.kernel.org/
ftp://ftp.kernel.org
本站点是Linux内核开发的中心。可以获得最新发行版和相关信息。注意,这个FTP站点
在全球都有镜像,所以你可以找最近的。
ftp://sunsite.unc.edu/pub/Linux/docs/
ftp://tsx-11.mit.edu/pub/Linux/docs/
“Linux文档计划”中有大量称为“HOWTO”的有趣文档;一些与内核相关的主题极具技
术性。Sunsite和tsx-11还有大量在Linux上可以应用的程序;总的来讲,不仅仅是docs/
目录,他们都相当有趣。我敢肯定你已经知道这些文件了,但我觉得还是有必要提到他
们。
http://www.ssc.com/
SSC,专业系统顾问,是Linux Journal的出版商,他们的站点有他们出版的大部分文章
的HTML版。他们印刷的有趣文章在出版不久后就转换成HTML文件,在Web上发行。
http://www.conceta.it/linux/
这是个意大利站点,Linux的拥护者积累了大量信息,这些信息是关于所有正在运行的和
Linux有关的项目。也许你已经知道一些有有关Linux开发的HTTP连接的站点;如果你不
知道,这个站点是个很好的起点。
相关书目
除了源码和互连网资源,很多好书也涉及到本书讨论的一些主题。下面的列表是我个人
在这个领域内选择的一些书籍。我列的这些书或者是Unix系统软件功能文档,或者描述
了有趣的硬件主题。我没有列出任何关于PC结构的书,因为现在这样的书太多了。不幸
的是我也没法建议任何关于Sparc结构的书,因为我找不到这样的书。如果你需要有关信
息,我绝对相信通过WEB你可以填补这个空缺。
[0] Bach, Maurice. The Design of the Unix Operating System,Prentice
Hall.1986.
本书尽管内容相当陈旧,但含盖了所有运行Unix的主题。它可是Linus本人编写Linux第
一版时主要的灵感来源。
[1] Beck , Michael. Linux Kernel Internals. Addison-Wesley. 1997.
本书重点在于Linux的内部数据结构和算法;如果你喜爱这写详细介绍,你会很喜欢这本
书的。第一版对应Linux 1.2版;我不知道最新版本有什么进展。2.0版及其后继版本与1
.2版有很大差别。
[2] Stevens, Richard. Advanced Programming in The Unix Environment.
Addison-Wesley. 1992.
这里介绍了所有Unix系统调用的详细资料。在使用设备高级功能的方法时,本书会是很
好的参考。对Unix语义中任何可能的不明之处,参考本书都可以得到解决。
[3] Stevens, Richard. Unix Network Programming. Prentice Hall. 1990.
如你所想,本书是网络主题的高效参考书。在主题选择范围和质量上和“Advanced
Programming”相匹配。本书包含有各种源代码可以测试用户空间网络编程的各个角落。
[4] Comer, Douglas, and Stevens, David. Internetworking with TCP/IP Vol
I,II,III. Prentice Hall. 1991.
本书搜集了所有关于Internet的网络信息。描述了Internet协议族和一些它们的实现。
[5] Shanley, Tom, and Anderson, Don. PCI System Architecture.
Addison-Wesley.1995.
本书详述PCI总线和标准接口。在大多数硬件主题中都可以找到类似“系统结构”这样的
标题,这些都是由一个作者写的。这些书都很有趣,尽管有那么点偏向于PC。我最喜欢P
CI那一卷。这些书中至少有一本我不喜欢,但如果仔细研究,可以看出这本书不错,就
是所描述的系统结构不怎么样。
[6] Digital Semiconductor. Alpha AXP Architecture Handbook. Digital
Semiconductor. 1994.
从Digital Semiconductor可以免费获得本书和“Alpha AXP Reference Manual”。它们
介绍了Alpha处理器的机器语言,以及所涉及使用的设计主题。本书的订货号码是EC-QD2
KA-TE。
本书使用的约定
下面给出本书所使用的字体约定。
Italic
用于文件和目录名,程序和命令名,命令行选项,电子邮件地址以及路径名,URL和强调
新名词。
Boldface
用来表示按键(如,Ctrl-N)。
Constant Width
代码
Constant Italic
用来表示变量选项,关键字,或是用户用来替代实际值的文本。
Constant Bold
在例子用来表示应该由用户键入的命令或其他文本。
我们很愿意听您的反馈
我们已尽全力调整本书内容,但您仍可能发现有些内容不对(甚至我们可能出了错误!
)如果您的建议与我们以后版本有关,请告诉我们您找到的错误以及您的建议,写信到
:
O’Reilly & Associates,Inc.
101 Morris Street
Sebastopol, CA 95472
1-800-998-9938(美国或加拿大)
1-707-829-0515(国际/本地)
1-707-829-0104(传真)
您也可以给我们电子邮件。加入邮件组或要一份目录,请发电子邮件到:
nuts@oreilly.com(通过互连网)
uunet!oreilly!info(通过UUCP)
询问技术问题或对本书的评论,请发电子邮件到:
bookquestions@oreilly.com(通过互联网)
最后,您可以在WWW上找到我们http://www.oreilly.com/
致谢
本书不仅仅是我个人努力的结果:许多人不仅在硬件材料上给了我充分的帮助,精神上
也给了我巨大的支持。我要感谢Quant-X的Dreyer先生,他借给我一部Alpha计算机,这
样我可以测试本书例子代码的可移植性。Sun-Italia对我也很好,他们借了我一部Sparc
机器,这样我可以把他们机器的操作系统升级成我需要的。ImageNation捐赠我了一个PC
I视频捕捉卡,我可以用来研究PCI和DMA特性。
如果没有Andy Oram和Michael Johnson的支持,没有Federica,我的女朋友——嗯,我
妻子在心理上对我的支持,本书是不可能完成的。Andy是我全能的编辑,而就是Michael
要求我给Linux Journal写东西的,并且把我介绍给Andy——如果有什么人对本书觉得心
虚,那就是Michael了。我还要感谢Georg van Zezschwitz,他介绍给我这个奇妙的内核
模块世界,并且在给Linux Journal写文章时,给了我很大帮助。我想感谢Silvana
Ranzoli,我高中时代的英语老师,由于她无情地(有时简直感觉象是残酷)承诺可以得
益于她的班级。我感激Ellen Siever,她纠正了我在高中以后学到的所有不正规语法,由
于我对重写从来不满意,所以每当我有那种黑客主义和极端细致倾向是时候,她对我总
是格外耐心。
Alan Cox,Greg Hankins,Hans Lermen,Heiko Eissfeldt和Miguel de Icaza(按照首
字母顺序)从技术角度评论了本书。他们的意见和建议对我的小错和不足很有用。我要感
谢他们在我写书的过程中所花费的宝贵时间,这看起来跟他们这些大拿要做的事情毫不
相干。
我还要感谢允许我花时间集中精力研究Linux内核,而不是从事实际的‘工作’的人们。
包括Virginio Cantoni,Alberto Biancardi还有大学里可视实验室的其他工作人员。还
要感谢Davide Yachaya 和system.it的所有工作人员,我本来是在那里帮忙做网络管理
员的。
也要感谢O’Reilly的全体工作人员:David Futato,版本编辑和产品编辑;Chris
Reilley,技术插图作者;Jane Ellin和Nicole Gipson Arigo的质量担保;Seth
Maislin,制作索引;Len Muellner和Chris Maden的工具支持;Edie Freedman的封面设
计;Nancy Priest的内部设计;还有Sheryl Avruch,产品经理。
放到最后的可不是最少的。我要感谢Linux开发者的忘我工作。这包括内核编码人员和用
户级编码人员,他们常常被忽略。本书从未指出他们的姓名,因为我可能忘记一些人,
这样对他们就公平了。但有时,我破例叫了Linus的名字——希望他不介意。
--
※ 来源:.哈工大紫丁香 http://bbs.hit.edu.cn [FROM: 202.118.239.147]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.804毫秒