深入Linux设备驱动程序内核机制
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 字符设备驱动程序

现实世界中存在着大量的设备,这些设备在电气特性和I/O方式上都各不相同。为了简化设备驱动程序员的工作,Linux系统从这些各异的设备中提取出了共性的特征,将其划分为三大类:字符设备、块设备和网络设备。内核针对每一类设备都提供了对应的驱动模型框架,包括基本的内核设施和文件系统接口。这样设备驱动程序员在写某类设备驱动程序时,就有一套完整的驱动模型框架可以使用,从而可将大量的精力放在设备本身的操作上。图2-1展示了一个粗略的Linux设备驱动程序结构图:

图2-1 Linux设备驱动程序结构图

其中,字符设备驱动程序是这三类设备驱动程序中最常见,也是相对比较容易理解的一种,现实中的大部分硬件都可由字符设备驱动程序来控制。这类硬件的特征是,在I/O传输过程中以字符为单位,这种字符流的传输速率通常都比较缓慢(因而其内核设施中不提供缓存机制),常见的如键盘、鼠标及打印机等设备。

本章将详细讨论构成字符设备驱动程序的内核设施的幕后机制,此外还将讨论应用程序如何与字符设备驱动程序进行交互,也即应用程序如何使用字符设备驱动程序提供的服务,这将涉及字符设备的文件系统接口等相关内容。

字符设备驱动程序所提供的功能是以设备文件本书中“设备文件”、“设备文件节点”和“设备节点”表述的是同一个意思。的形式提供给用户空间程序使用,本章将首先讨论应用程序与设备文件,然后再深入探讨字符设备驱动程序的内核机制。