前言

本书第1版在2008年初出版以后,受到广大读者的支持和厚爱,累计销售1.6万册,从几年的市场和读者反馈看,在第1版中还存在一些不足,主要是以下几方面。

● 没有现成的开发环境,读者需要从头到尾构建,而构建需要花费很长的时间,许多时候会不成功,加之配套光盘中的实例没有Makefile,更加大了操作的难度。

● 没有配套的开发板,大量的基于S3C2410的实例读者身边如果没有可以直接运行的平台,就无法亲身体验这些驱动。

● 个别内容实用性不强或过于陈旧,也有个别知识点的讲解语言晦涩,读者不易理解,如platform驱动。

● 一些知识点内容不够完整,如input驱动、USB UDC和gadget驱动、SPI驱动、ASoC驱动等。

鉴于此,作者针对以上问题对第1版内容进行修订,推出了第2版。新版中对全书超过40%的内容进行了修订。这些修订,一些是对过时内容的删除,一些是对讲解不清的知识点的修正,一些是对重点内容的增强,一些则是有用知识点的增加,其目的是为读者提供一套更加准确和完整的全方位、立体式Linux设备驱动学习平台。第2版相对第1版的主要改动如下。

(1)直接提供VirtualBox虚拟机,该虚拟机上已包含了书中所需的开发环境和源代码,读者不再需要安装环境即可进行实验,书中详细介绍了各个实验的步骤。

(2)提供了专门的配套学习板—基于三星S3C6410 SoC的LDD6410(Linux Device Drivers 6410),使得书中的各种真实设备驱动实例有了实验的依托。

(3)全面升级内核至Linux2.6.28.6,根据Linux内核API的变更情况更新了书中的所有内容,如I2C驱动的体系结构、网络NAPI的接口等,并对delayed_work等较新的内核机制进行了介绍。

(4)删除了过时的内容,如传统的按键驱动、SAA7113H启动、传统的IDE驱动等,同时新增了大量内容,包括Linux内核的编码风格、Linux内核的移植、Android驱动、USB UDC和gadget驱动、ALSA SoC驱动、input驱动、SPI驱动、基于sysfs的设备驱动、Linux设备驱动的固件加载、Linux性能调优工具、Linux设备驱动的电源管理、Linux驱动的分层设计思想、主机驱动与设备驱动分离设计思想等。

(5)在块设备驱动方面,删除了RAMDISK驱动实例,而新增了更加简单易懂的vmem_disk、类似于globalmem和globalfifo驱动。

(6)对许多关键知识点的讲解进行了语言调整和内容增强,以便读者能更好地理解,例如,以专门章节讲解platform驱动等。

全书总体结构仍然与第1版一致,共分4篇23章,内容安排如下。

第1篇(第1~3章)主要讲解Linux设备驱动的基础。

第1章主要讲解设备驱动的作用,并从无操作系统的设备驱动引出了Linux操作系统下的设备驱动以及全书所用实验环境的安装方法。

第2章系统地讲解了一个Linux驱动工程师应该掌握的硬件知识,使读者打下Linux设备驱动开发的硬件基础。本章涵盖了各种类型的CPU、存储器和常见的外设,并讲解了硬件时序分析方法和仪器使用方法。

第3章将Linux设备驱动放在Linux2.6内核背景中进行讲解,说明Linux内核的基本原理和编程方法,为编写Linux设备驱动打下软件基础。

第2篇(第4~12章)主要讲解Linux设备驱动编程的基础理论、字符设备驱动、设备驱动设计中涉及的并发控制、同步等问题以及Linux驱动的工程化。

第4、5章分别讲解Linux内核模块和Linux设备文件系统。

第6~9章以虚拟设备globalmem和globalfifo为主线讲解了字符设备驱动的编写方法,并讲解了并发控制、阻塞与非阻塞、异步I/O等高级控制功能。

第10、11章分别讲解Linux驱动编程中所涉及的中断和定时器,内核和I/O操作处理方法。

globalmem和globalfifo 驱动与真实项目中看到的驱动有一些不同,第12章详细讲解 Linux设备驱动的工程化问题,让读者了解真实的驱动要考虑的诸多问题。

第3篇(第13~21章)深刻剖析复杂设备驱动的体系架构,每一章都给出了具体的实例,涉及的设备包括块设备、终端设备、I2C适配器与I2C设备、网络设备、PCI设备、USB主机控制器、USB 设备、UDC、gadget、LCD 设备、Flash 设备等。本篇的讲解抽象与具体相结合,先以模板的形式给出各种设备驱动的设计框架,然后用具体实例设备的驱动填充对应的模板。

第4篇(第22~23章)详细讲解了Linux设备驱动和内核的调试和移植方法。

第22章讲解了Linux设备驱动的开发环境构建以及借助printk、oops、/proc、strace、仿真器进行驱动调试的方法,最后介绍了Linux的性能调优工具。

第23章讲解了开发可移植驱动程序以及借助芯片范例程序、demo板驱动和其他操作系统驱动等现成代码进行 Linux 驱动快速移植的方法,最后介绍了如何在一块新的SoC 和电路板上构建Linux。

本书的结构及内容参见附图。

最后,再次对广大读者以及所有为本书提出过宝贵意见、为本书的诞生奉献过力量的人们表示最诚挚的谢意!读者朋友可继续通过本书专用网址http://www.linuxdriver.cn与作者和编辑团队进行交流。

本书服务QQ:1275822672

服务E-mail:book@Linuxdriver.cn

读者可以邮件咨询索取相关资料

宋宝华

2010年6月于上海浦东