📄 (ldd) ch00-前言(转载).txt
字号:
(LDD) Ch00-前言(转载)
序
作为一名电子工程师,而且是一个什么都想自己做的人,我一向愿意用计算机来控制外
部设备。甚至还在我们父辈的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结构的书,因为现在这样的书太多了。不幸
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -