Linux具有诱人的魅力,它是一个由全世界不同民族。不同信仰、不同性别的人共同参与和协作的国际性项目。Linux免费提供源代码,并且具有与LUnix类似的为人们所熟悉的应用程序编程环境,这-一切造就了它今天的巨大成功。通过互联网从专家处即时获得的高质量的免费支持也发挥了重要作用。它促咸了一个壶大的Lmex社区。
在技术方面,开发人员可以获得所有源码。并由此得出一些剑新方案,他们因此感到无比振奋。比如,你可以修改《 hack》Linux的源码。并做定制,让设备在几秒钟之内启动。面使用一个有专利的商业操作系统赚很难完成这样的杜琴。
第一章 引言
![](https://i-blog.csdnimg.cn/blog_migrate/a21ecb062cac8fae8c2f0e1915c4d298.png)
![](https://i-blog.csdnimg.cn/blog_migrate/42856f8abe18fab7af795cb5edacf4eb.png)
第二章 内核
在开始步入Linux设备驱动程序的神秘世界之前,让我们从驱动程序开发人员的角度看几个内核构成要素,熟悉一些基本的内核概念。我们将学习内核定时器、同步机制以及内存分配方法。不过,我们还是得从头开始这次探索之旅。因此,本章要先浏览一下内核发出的启动信息,然后再逐个讲解一些有意思的点。
![](https://i-blog.csdnimg.cn/blog_migrate/0e50a497bcfd31a7d86c2884bd5604f7.png)
第三章 内核组件
本章将介绍一些与驱动程序开发相关的内核组件。我们首先从内核线程开始。内核线程类似于用户进程,通常用于并发处理一些工作。
另外,内核还提供了一些接口,使用它们可以简化代码、消除冗余、增强代码可读性,并有利于代码的长期维护。本章还会介绍链表、散列表、工作队列、通知链(notifier chain)、完成函数以及错误处理辅助接口等。这些接口经过了优化,而且清除了bug,使用这些接口的驱动程序也可以由此获益。
![](https://i-blog.csdnimg.cn/blog_migrate/a54a62b97d02e6e0819b85ef8374fa86.png)
第四章 基本概念
我们马上就要编写设备驱动程序了。但在此之前,让我们先了解一些驱动程序的相关概念。本章首先介绍本书的两个核心概念,即PC兼容的系统和嵌入式计算机中常见的设备和IO接口。中断处理在大多数驱动程序中都存在,因此,本章还讨论了中断处理程序。之后,我们介绍2.6内核中新引入的设备模型。该新模型建立于sysfs.kobject、设备类和udev等抽象概念上,这些概念是所有设备驱动程序的共性。新的设备模型也会淘汰一些内核空间策略,将其推到用户空间。这导致了dev节点管理、热插拔、冷插拔、模块自动加载、固件下载等功能的彻底改变。
![](https://i-blog.csdnimg.cn/blog_migrate/1920810c7fadda5c765d78ef9b5b534d.png)
第五章 字符设备驱动程序
现在,你已经准备就绪了,可以尝试编写一个简单但实用的设备驱动程序了。本章将深入探讨字符设备驱动程序。顺序存取设备数据的内核代码。字符设备驱动程序能从打印机、鼠标、看门狗、磁带、内存、实时时钟等几类设备获取原始数据,但它不适合管理硬盘、软盘和光盘等可随机访问的块设备中的数据。
![](https://i-blog.csdnimg.cn/blog_migrate/61be432cea327d90d6fc7e88b46d51ee.png)
第六章 串行设备驱动程序
![](https://i-blog.csdnimg.cn/blog_migrate/b7d6fef9e4ba325e0d50e582e2a8883f.png)
第七章 输入设备驱动程序
![](https://i-blog.csdnimg.cn/blog_migrate/ff410ca61650e43db1d10b11c7d8ada8.png)
第八章 I2C协议
![](https://i-blog.csdnimg.cn/blog_migrate/cada2889d7932aa81365a4f74c4f8aba.png)
第九章 PCMCIA和CF
![](https://i-blog.csdnimg.cn/blog_migrate/88ed69b299c8f305f038cce71df279b8.png)
第十章 PCI
![](https://i-blog.csdnimg.cn/blog_migrate/296c39f6d897a35b6f55501331b75020.png)
第十一章 USB
如今,计算机外部总线差不多都采用USB (Universal Serial Bus,通用串行总线)。USB支持热插拔,数据传输模式多样,驱动程序通用,因此被广泛应用于消费类电子产品。它很好地扩充了计算机系统的功能。USB极高的受欢迎程度和随之而来的巨大经济效益促进了全世界计算机外围技术的实施和发展。
![](https://i-blog.csdnimg.cn/blog_migrate/5a11f11922c3eb3ceb394f5ecd28a2bb.png)
第十二章 视频驱动程序
视频硬件负责为计算机系统生成可视化的输出。本章将介绍内核对视频控制器的支持,以及对帧缓冲进行抽象的好处。此外,还将学习编写控制台驱动程序,以显示内核发出的信息.
![](https://i-blog.csdnimg.cn/blog_migrate/8e22a668b9b127a424927d8662623a1d.png)
第十三章 音频驱动程序
本章介绍内核是如何支持音频控制器和编解码器的。我们来学习Linux声音子系统的架构及其编程模式。
![](https://i-blog.csdnimg.cn/blog_migrate/9e11061f509cd87e0b3516492ebe6385.png)
]
第十四章 块设备驱动程序
块设备是一种能随机访问的存储介质。与字符设备不同,块设备能保存文件系统数据。本章介绍Linux是如何支持存储总线和设备的。
![](https://i-blog.csdnimg.cn/blog_migrate/28496734522b57c74589d6f610864d3f.png)
第十五章 网络接口卡
![](https://i-blog.csdnimg.cn/blog_migrate/d34591e73ad8dfabce8ec94c615531a8.png)
第十六章 Linux无线设备驱动
![](https://i-blog.csdnimg.cn/blog_migrate/5ebccfe1a21821c8215cddf5f2308349.png)
第十七章 存储技术设备
![](https://i-blog.csdnimg.cn/blog_migrate/dc7ba0ab46c43c57fc154a020dcc9137.png)
第十八章 嵌入式Linux
![](https://i-blog.csdnimg.cn/blog_migrate/3e8fbac0be7428c5c5d53f83fd7f30c7.png)
第十九章 用户空间的驱动程序
![](https://i-blog.csdnimg.cn/blog_migrate/4d967a41314719f3382821cd9e52dcbb.png)
第二十章 其他设备和驱动程序
![](https://i-blog.csdnimg.cn/blog_migrate/8ee5b685b12d2ba5f942eff4b82675f4.png)
第二十一章 调试设备驱动程序
![](https://i-blog.csdnimg.cn/blog_migrate/5127ebb0815a84732929be29fbc3428c.png)
第二十二章 维护与发布
![](https://i-blog.csdnimg.cn/blog_migrate/6ad61c359a748d2143ca2b52ceeb8b21.png)
第二十三章 结束
![](https://i-blog.csdnimg.cn/blog_migrate/e72ddb5de406d19e1021d3d3216567ca.png)