Linux设备驱动开发详解(第2版)(前一版狂销3万册,畅销书最新升级)
基本信息
编辑推荐
荣获51CTO网站主办的2009年度最佳技术图书奖,网友好评如潮
荣获ZD.NET技术网站主办的2009年度十佳IT图书之一
首版销售达3万册,被china-pub评选进入2009年度技术图书畅销榜TOP50
2010版畅销书最新升级,基于最新Linux内核和LDD6410平台,本年度最值得期待的驱动开发技术图书
推荐阅读
内容简介回到顶部↑
本书是一本介绍linux设备驱动开发理论、框架与实例的书,本书基于ldd6410开发板,以linux 2.6版本内核为蓝本,详细介绍自旋锁、信号量、完成量、中断顶/底半部、定时器、内存和i/o映射以及异步通知、阻塞i/o、非阻塞i/o等linux设备驱动理论;字符设备、块设备、tty设备、i2c设备、lcd设备、音频设备、usb设备、网络设备、pci设备等linux设备驱动的架构和框架中各个复杂数据架构和函数的关系,并讲解了linux驱动开发的大量实例,使读者能够独立开发各类linux设备驱动。
本书内容全面,实例丰富,操作性强,语言通俗易懂,适合广大linux开发人员、嵌入式工程师参考使用。
本书内容全面,实例丰富,操作性强,语言通俗易懂,适合广大linux开发人员、嵌入式工程师参考使用。
目录回到顶部↑
第1篇 linux设备驱动入门
第1章 linux设备驱动概述及开发环境构建
1.1 设备驱动的作用辅
1.2 无操作系统时的设备驱动
1.3 有操作系统时的设备驱动
1.4 linux设备驱动
1.4.1 设备的分类及特点
1.4.2 linux设备驱动与整个软硬件系统的关系
1.4.3 linux设备驱动的重点、难点
1.5 linux设备驱动开发环境构建
1.5.1 pc上的linux环境
1.5.2 ldd6410开发板
1.5.3 工具链安装
1.5.4 主机端nfs和trip服务安装
1.5.5 源代码阅读和编辑
1.6 设备驱动hello world:led驱动
1.6.1 无操作系统时的led驱动
1.6.2 linux下的led驱动
1.7 全书结构
第2章 驱动设计的硬件基础
第1章 linux设备驱动概述及开发环境构建
1.1 设备驱动的作用辅
1.2 无操作系统时的设备驱动
1.3 有操作系统时的设备驱动
1.4 linux设备驱动
1.4.1 设备的分类及特点
1.4.2 linux设备驱动与整个软硬件系统的关系
1.4.3 linux设备驱动的重点、难点
1.5 linux设备驱动开发环境构建
1.5.1 pc上的linux环境
1.5.2 ldd6410开发板
1.5.3 工具链安装
1.5.4 主机端nfs和trip服务安装
1.5.5 源代码阅读和编辑
1.6 设备驱动hello world:led驱动
1.6.1 无操作系统时的led驱动
1.6.2 linux下的led驱动
1.7 全书结构
第2章 驱动设计的硬件基础
前言回到顶部↑
本书第1版在2008年初出版以后,受到广大读者的支持和厚爱,从几年的市场和读者反馈看,在第1版中还存在一些不足,主要是以下几方面。
·没有现成的开发环境,读者需要从头到尾构建,而构建需要花费很长的时间,许多时候会不成功,加之配套光盘中的实例没有Makefile,更加大了操作的难度。
·没有配套的开发板,大量的基于S3C2410的实例读者身边如果没有可以直接运行的平台,就无法亲身体验这些驱动。
·个别内容实用性不强或过于陈旧,也有个别知识点的讲解语言晦涩,读者不易理解,如platform驱动。
·一些知识点内容不够完整,如input驱动、USB UDC和gadget驱动、SPI驱动、ASoC驱动等。
鉴于此,作者针对以上问题对第1版内容进行修订,推出了第2版。新版中对全书超过40%的内容进行了修订。这些修订,一些是对过时内容的删除,一些是对讲解不清的知识点的修正,一些是对重点内容的增强,一些则是有用知识点的增加,其目的是为读者提供一套更加准确和完整的全方位、立体式Linux设备驱动学习平台。第2版相对第1版的主要改动如下。
(1)直接提供VirtualBox虚拟机,该虚拟机上已包含了书中所需的开发环境和源代码,读者不再需要安装环境即可进行实验,书中详细介绍了各个实验的步骤。
(2)提供了专门的配套学习板——基于三星S3C6410 SoC的LDD6410(Linux Device Drivers6410),使得书中的各种真实设备驱动实例有了实验的依托。
(3)全面升级内核至Linux 2.6.28.6,根据Linux内核APl的变更情况更新了书中的所有内容,如I2C驱动的体系结构、网络NAPI的接口等,并对delayed_work等较新的内核机制进行了介绍。
(4)删除了过时的内容,如传统的按键驱动、SAA7113H启动、传统的IDE驱动等,同时新增了大量内容,包括Linux内核的编码风格、Linux内核的移植、Android驱动、USBUDC和gadget驱动、ALSASoC驱动、input驱动、SPI驱动、基于sysfs的设备驱动、Linux设备驱动的固件加载、Linux性能调优工具、Linux设备驱动的电源管理、Linux驱动的分层设计思想、主机驱动与设备驱动分离设计思想等。
(5)在块设备驱动方面,删除了RAMDISK驱动实例,而新增了更加简单易懂的vmem』isk、类似于globalmem和globalfifo驱动。
(6)对许多关键知识点的讲解进行了语言调整和内容增强,以便读者能更好地理解,例如,以专门章节讲解platform驱动等。
全书总体结构仍然与第1版一致,共分4篇23章,内容安排如下。
第1篇(第1~3章)主要讲解Linux设备驱动的基础。
第1章主要讲解设备驱动的作用,并从无操作系统的设备驱动引出了Linux操作系统下的设备驱动以及全书所用实验环境的安装方法。
第2章系统地讲解了一个Linux驱动工程师应该掌握的硬件知识,使读者打下Linux设备驱动开发的硬件基础。本章涵盖了各种类型的CPU、存储器和常见的外设,并讲解了硬件时序分析方法和仪器使用方法。
第3章将Linux设备驱动放在Linux 2.6内核背景中进行讲解,说明Linux内核的基本原理和编程方法,为编写Linux设备驱动打下软件基础。
第2篇(第4~12章)主要讲解Linux设备驱动编程的基础理论、字符设备驱动、设备驱动设计中涉及的并发控制、同步等问题以及Linux驱动的工程化。
第4、5章分别讲解Linux内核模块和Linux设备文件系统。
第6—9章以虚拟设备globalmem和globalfifo为主线讲解了字符设备驱动的编写方法,并讲解了并发控制、阻塞与非阻塞、异步I/O等高级控制功能。
·没有现成的开发环境,读者需要从头到尾构建,而构建需要花费很长的时间,许多时候会不成功,加之配套光盘中的实例没有Makefile,更加大了操作的难度。
·没有配套的开发板,大量的基于S3C2410的实例读者身边如果没有可以直接运行的平台,就无法亲身体验这些驱动。
·个别内容实用性不强或过于陈旧,也有个别知识点的讲解语言晦涩,读者不易理解,如platform驱动。
·一些知识点内容不够完整,如input驱动、USB UDC和gadget驱动、SPI驱动、ASoC驱动等。
鉴于此,作者针对以上问题对第1版内容进行修订,推出了第2版。新版中对全书超过40%的内容进行了修订。这些修订,一些是对过时内容的删除,一些是对讲解不清的知识点的修正,一些是对重点内容的增强,一些则是有用知识点的增加,其目的是为读者提供一套更加准确和完整的全方位、立体式Linux设备驱动学习平台。第2版相对第1版的主要改动如下。
(1)直接提供VirtualBox虚拟机,该虚拟机上已包含了书中所需的开发环境和源代码,读者不再需要安装环境即可进行实验,书中详细介绍了各个实验的步骤。
(2)提供了专门的配套学习板——基于三星S3C6410 SoC的LDD6410(Linux Device Drivers6410),使得书中的各种真实设备驱动实例有了实验的依托。
(3)全面升级内核至Linux 2.6.28.6,根据Linux内核APl的变更情况更新了书中的所有内容,如I2C驱动的体系结构、网络NAPI的接口等,并对delayed_work等较新的内核机制进行了介绍。
(4)删除了过时的内容,如传统的按键驱动、SAA7113H启动、传统的IDE驱动等,同时新增了大量内容,包括Linux内核的编码风格、Linux内核的移植、Android驱动、USBUDC和gadget驱动、ALSASoC驱动、input驱动、SPI驱动、基于sysfs的设备驱动、Linux设备驱动的固件加载、Linux性能调优工具、Linux设备驱动的电源管理、Linux驱动的分层设计思想、主机驱动与设备驱动分离设计思想等。
(5)在块设备驱动方面,删除了RAMDISK驱动实例,而新增了更加简单易懂的vmem』isk、类似于globalmem和globalfifo驱动。
(6)对许多关键知识点的讲解进行了语言调整和内容增强,以便读者能更好地理解,例如,以专门章节讲解platform驱动等。
全书总体结构仍然与第1版一致,共分4篇23章,内容安排如下。
第1篇(第1~3章)主要讲解Linux设备驱动的基础。
第1章主要讲解设备驱动的作用,并从无操作系统的设备驱动引出了Linux操作系统下的设备驱动以及全书所用实验环境的安装方法。
第2章系统地讲解了一个Linux驱动工程师应该掌握的硬件知识,使读者打下Linux设备驱动开发的硬件基础。本章涵盖了各种类型的CPU、存储器和常见的外设,并讲解了硬件时序分析方法和仪器使用方法。
第3章将Linux设备驱动放在Linux 2.6内核背景中进行讲解,说明Linux内核的基本原理和编程方法,为编写Linux设备驱动打下软件基础。
第2篇(第4~12章)主要讲解Linux设备驱动编程的基础理论、字符设备驱动、设备驱动设计中涉及的并发控制、同步等问题以及Linux驱动的工程化。
第4、5章分别讲解Linux内核模块和Linux设备文件系统。
第6—9章以虚拟设备globalmem和globalfifo为主线讲解了字符设备驱动的编写方法,并讲解了并发控制、阻塞与非阻塞、异步I/O等高级控制功能。
媒体评论回到顶部↑
设备驱动程序是嵌入式操作系统的重要模块,也是难点之一,Linux没备驱动程序更以复杂和繁多而著名,本书的作者集多年授课和开发的经验,以简洁的语言和丰富的实例讲述了这一技术,深入浅出,值得一读。
何小庆(北京麦克泰软件技术有限公司董事长)
“点亮LED”,寥寥几行代码,你可以做到。本书从简单入手,循序渐进。那些难以触及的理论,如并发控制、中断、内存映射等,在阶梯式的代码叠加中被你逐步掌握。熟悉硬件规范后,你只需一步步按框架实践,便可开发出一个USB设备驱动。
陈莉君(西安邮电学院教授)
本书系统讲述了Linux内核驱动的支撑技术,涉及内核编程方式、内核模块、设备文件系统、同步互斥机制等。本书针对具体硬件的真实外设。结合实际外设的硬件逻辑,讲解了常见类型驱动程序的编写方法和实现细节。对广大Linux爱好者而言,是一本值得推荐的好书。
陈渝(清华大学副教授)
本书有一个非常突出的特点——实用,全书以大量实例来引导读者编写以及移植Linux设备驱动,这些实例是作者多年Linux设备驱动开发从业经验的总结,读者一定会从中受益。
郭淳学(中国软件行业学会嵌入式系统分会副理事长兼秘书长)
在Linux内核源代码树的各个子系统中,设备驱动是最大的一个子树分支,目前最新的Linux内核支持70多种设备驱动家族。Linux下的驱动编程一直被认为是一门艺术,本书是通往Linux设备驱动开发殿堂的钥匙。
史应生(红帽专家服务团队资深咨询顾问,RHCA、RHCSS中国第一人)
设备驱动是操作系统最具多样性和复杂性的部分。回想限入式系统教学之初,我几乎买遍了市面上的Linux图书也没有找到一个模块化驱动的开发实例。本书语言通俗易懂,结构清晰,作者有丰富的培训和开发经验,是国内少有的驱动程序开发专著。
马忠梅(北京理工大学副教授)
如果说硬件是系统的躯体;软件是系统的灵魂,驱动就是连接躯体和灵魂的纽带,是系统运转的枢纽。本书旨在引导读者,消除读者对驱动开发的神秘感,同时也指出了老手常见的盲点与误区。更难得的是,本书通过大量开发实例生动、系统地讲解了Linux设备驱动开发的方方面面。
向农(电子工程世界总编)
何小庆(北京麦克泰软件技术有限公司董事长)
“点亮LED”,寥寥几行代码,你可以做到。本书从简单入手,循序渐进。那些难以触及的理论,如并发控制、中断、内存映射等,在阶梯式的代码叠加中被你逐步掌握。熟悉硬件规范后,你只需一步步按框架实践,便可开发出一个USB设备驱动。
陈莉君(西安邮电学院教授)
本书系统讲述了Linux内核驱动的支撑技术,涉及内核编程方式、内核模块、设备文件系统、同步互斥机制等。本书针对具体硬件的真实外设。结合实际外设的硬件逻辑,讲解了常见类型驱动程序的编写方法和实现细节。对广大Linux爱好者而言,是一本值得推荐的好书。
陈渝(清华大学副教授)
本书有一个非常突出的特点——实用,全书以大量实例来引导读者编写以及移植Linux设备驱动,这些实例是作者多年Linux设备驱动开发从业经验的总结,读者一定会从中受益。
郭淳学(中国软件行业学会嵌入式系统分会副理事长兼秘书长)
在Linux内核源代码树的各个子系统中,设备驱动是最大的一个子树分支,目前最新的Linux内核支持70多种设备驱动家族。Linux下的驱动编程一直被认为是一门艺术,本书是通往Linux设备驱动开发殿堂的钥匙。
史应生(红帽专家服务团队资深咨询顾问,RHCA、RHCSS中国第一人)
设备驱动是操作系统最具多样性和复杂性的部分。回想限入式系统教学之初,我几乎买遍了市面上的Linux图书也没有找到一个模块化驱动的开发实例。本书语言通俗易懂,结构清晰,作者有丰富的培训和开发经验,是国内少有的驱动程序开发专著。
马忠梅(北京理工大学副教授)
如果说硬件是系统的躯体;软件是系统的灵魂,驱动就是连接躯体和灵魂的纽带,是系统运转的枢纽。本书旨在引导读者,消除读者对驱动开发的神秘感,同时也指出了老手常见的盲点与误区。更难得的是,本书通过大量开发实例生动、系统地讲解了Linux设备驱动开发的方方面面。
向农(电子工程世界总编)
【插图】








点击看大图






加载中...
