**
前言
**
20世纪90年代末,我们IBM的一群同事将Linux内核移植到了一种智能手表上。目标设备虽然微不足道,但是移植Linux的任务却相当艰巨。在当时,内核中还不存在MTD(Memory Technology Device,内存技术设备)子系统,这意味着为了让文件系统能够运行在这种手表的闪存中,我们不得不从头开发必要的存储驱动程序。由于当时内核的输入事件驱动程序接口尚未诞生,因此手表的触摸屏与用户应用程序的接口非常复杂。让X Windows运行在手表的LCD上十分困难,因为X Windows和帧缓冲设备驱动程序搭配得并不好。如果你戴着一块防水的Linux智能手表,却不能躺在浴缸里实时获得股票行情,那么这块手表还有什么用呢?Linux几年前就已集成了蓝牙技术,而当时我们却花费了数月的时间将一种专有的蓝牙协议栈移植到手表上,从而使得这种手表可以联上因特网。电源管理系统虽然只能从手表的电池中多“榨出”短短几个小时时间,但也算够意思了;实际上,为了解决这个棘手的问题,我们也没少花心思。那时候,Linux红外项目Linux-Infrared还不稳定,而为了使用红外键盘输入数据,我们不得不与其协议栈小心翼翼地周旋。最后,由于当时还没有能应用于消费类电子产品的成型的编译器发行版,我们也只能自己编个编译器,并交叉编译出一个紧凑的应用程序集。
时光飞逝,当年的小企鹅已经成长为一名健壮的少年。过去我们编写了成千上万行代码并耗时一年完成的任务,若采用现在的内核,只需要几天就可以完成。但是,要成为一名能巧妙地解决多种问题的高级内核工程师,就必须理解今天的Linux内核提供的各种功能和设施。
在Linux内核源代码树提供的各个子系统中,drivers/目录是其中最大的一个分支,它比其他子系统大数倍。随着各种新技术的广泛应用,内核中新的设备驱动程序的开发工作正在稳步加速。最新的Linux内核支持多达70余种设备驱动程序。
本书主要讲解如何编写Linux设备驱动程序,介绍了目前内核所支持的主要设备类型的设计与开发,其中包括当年我在将Linux移植到手表中时未遇到的设备。本书在讲解每类设备驱动程序的时候,都会先介绍与该驱动程序相关的技术,接着给出一个实际的开发例子,最后列出相关的内核源代码文件。在介绍Linux设备驱动程序之前,本书先介绍了内核以及Linux 2.6的重要特性,重点介绍了设备驱动程序编写者感兴趣的内核知识。
目录
**[第1章 引言
1.1 演进](https://yq.aliyun.com/articles/98940)**
1.2 GNU Copyleft
1.3 kernel.org
1.4 邮件列表和论坛
1.5 Linux发行版
1.6 查看源代码
1.7 编译内核
1.8 可加载的模块
1.9 整装待发