背景
Linux设备驱动开发是Linux开发的热门领域,是所有Linux应用系统中不可缺少的组成部分。但是Linux设备驱动的开发门槛相对较高,主要原因如下:.
首先,编写Linux设备驱动必须牢固掌握自旋锁、信号量、完成量、中断顶/底半部、定时器、内存和I/O映射以及异步通知、阻塞/非阻塞、I/O等大量理论知识;
其次,由于近年来Linux内核在驱动方面更偏向于提供设备驱动的框架(framework)而非单个设备驱动,考虑到框架更强的兼容性,字符设备、块设备、TTY设备、I2C设备、LCD设备、音频设备、USB设备、网络设备、PCI设备等驱动的体系结构都变得愈发复杂,框架成为Linux设备驱动学习上的绊脚石。
因此,读者极需这样一本书:它以简单易懂的方式讲解Linux设备驱动中涉及的复杂理论,并对各种复杂设备的驱动框架进行全面剖析,引导读者走出由错综复杂的函数和数据结构组成的框架迷宫,这就是本书编写的初衷。 本书特点 目前市面上讲解Linux设备驱动的书并不多,而且多是从一个较小的视角对驱动中的某一个方面进行简单的解释,本书全面而详细地讲解了Linux设备驱动开发中涉及的理论以及多种设备驱动的框架,具有以下特点。
(1)本书基于Linux 2.6内核进行讲解,为便于移植,本书还对Linux 2.4和2.6内核在驱动开发方面的差异进行了对比。
(2)本书的实例背景非常简单,使读者能将注意力完全集中于驱动本身而不陷于复杂的实例。最简单的字符设备globalmem和globalfifo将解放读者的思路。
(3)本书将字符设备、块设备、TTY设备、I2C设备、LCD设备、Flash设备、网络设备、音频设备、USB设备、PCI设备等复杂设备驱动的框架作为核心内容。
(4)本书完全从工程实际出发,具有很强的可操作性。书中对Linux设备驱动开发环境建设、驱动的调试、驱动的移植等进行了讲解。在讲解驱动的同时,本书还给出了用户空间的验证方法,以便读者理清Linux设备驱动与上层应用的关系。
(5)本书内容虽集中于Linux设备驱动,但并不局限于Linux设备驱动,还将Linux设备驱动与无操作系统下的设备驱动及其他操作系统(主要是VxWorks)的驱动进行了对比分析,以便读者以更宏观的视角看待Linux设备驱动。
阅读完本书,读者将具备完全自主地从头到尾开发Linux设备驱动的能力,而不是只能对现有的驱动进行简单修改。
本书的内容简介
本书共分4篇23章,内容安排如下。
第1篇(第1~3章)主要讲解Linux设备驱动的基础。
第1章主要讲解设备驱动的作用,并从无操作系统的设备驱动引出了Linux操作系统下的设备驱动。
第2章系统地讲解了一个Linux驱动工程师应该掌握的硬件知识,使读者打下Linux设备驱动开发的硬件基础。本章涵盖了各种类型的CPU、存储器和常见的外设,并讲解了硬件时序分析方法和仪器使用方法。
第3章将Linux设备驱动放在Linux2.6内核背景中进行讲解,说明Linux内核的编程方法,为编写Linux设备驱动打下软件基础。
第2篇(第4~12章)主要讲解Linux设备驱动编程的基础理论、字符设备驱动及设备驱动设计中涉及的并发控制、同步等问题。
第4、5章分别讲解Linux内核模块和Linux设备文件系统。
第6~9章以虚拟设备globalmem和globalfifo为主线讲解了字符设备驱动的编写方法,各章还讲解了并发控制、阻塞与非阻塞、异步I/O等高级控制功能。..
.第10、11章分别讲解Linux驱动编程中所涉及的中断和定时器,内核和I/O操作处理方法。
第12章详细讲解Linux字符设备驱动的多个综合实例,将4—11章的所述知识在具体设备驱动中进行实践。
第3篇(第13~21章)深刻剖析复杂设备驱动的体系架构,每一章都给出了具体的实例,涉及的设备包括块设备、终端设备、I2C适配器与I2C设备、网络设备、PCI设备、USB设备、LCD设备、Flash设备等。本篇的讲解中抽象与具体相结合,先以模板的形式给出各种设备驱动的设计框架,然后用具体实例设备的驱动填充对应的模板。
第4篇(第22~23章)详细讲解了Linux设备驱动的调试和移植方法。
第22章讲解了Linux设备驱动的开发环境构建以及借助printk、Oops、/proc、strace、仿真器进行驱动调试的方法。
第23章讲解了开发可移植驱动程序以及借助芯片范例程序、demo板驱动和其他操作系统驱动等现成代码进行Linux驱动快速移植的方法。
感谢
首先要感谢我的父母、兄长和姐姐,正是他们的无私奉献,才得以使我从一个贫瘠的小镇走向广阔的发展空间,从事前沿技术的研发;其次要感谢我的导师杨平研究员,他总是毫无保留地将他的研究心得传授给我;同时,也要感谢许多在技术上给予我指导的老师,他们是韩宗芬、吴幼宁、李鹰、冯启德等;再次要感谢无数在学习和生活中给予我帮助的朋友,他们是何昭然、卢鹏、黄燕、李杨、方毅伟、贾建祥、王文祺、吴国举、刘仕杰、关国华、钟磊、张之华、贺亚峰、姜静、张家旺、章广成、余文君、梅景全等;最后,本书不可能被“空降”,如果没有世界上成千上万从事Linux驱动开发的前辈们提供的大量参考代码和技术资料,本书便会成为无本之木,无源之水,在此感谢你们!
联系我们
由于本书内容较多,编写时间仓促,书中难免存在疏漏和不足之处,恳请广大读者提出宝贵意见。本书责任编辑的联系方式是huangyan@ptpress.com.CB,欢迎来信交流。本书的相关资料和嵌入式系统相关资料、公开视频,请参见http://www.farsight.com.cn/download。
我们为本书开通了专用的网站,网址是http://www.linuxdriver.cn/,读者可以直接同我们交流,共同学习和提高。另外,我们还为本书提供了专门的联系邮箱author@linuxdriver.cn,读者可以随时同我们联系。...
编 者
2008年1月