上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
第2章 字符设备驱动程序
现实世界中存在着大量的设备,这些设备在电气特性和I/O方式上都各不相同。为了简化设备驱动程序员的工作,Linux系统从这些各异的设备中提取出了共性的特征,将其划分为三大类:字符设备、块设备和网络设备。内核针对每一类设备都提供了对应的驱动模型框架,包括基本的内核设施和文件系统接口。这样设备驱动程序员在写某类设备驱动程序时,就有一套完整的驱动模型框架可以使用,从而可将大量的精力放在设备本身的操作上。图2-1展示了一个粗略的Linux设备驱动程序结构图:
图2-1 Linux设备驱动程序结构图
其中,字符设备驱动程序是这三类设备驱动程序中最常见,也是相对比较容易理解的一种,现实中的大部分硬件都可由字符设备驱动程序来控制。这类硬件的特征是,在I/O传输过程中以字符为单位,这种字符流的传输速率通常都比较缓慢(因而其内核设施中不提供缓存机制),常见的如键盘、鼠标及打印机等设备。
本章将详细讨论构成字符设备驱动程序的内核设施的幕后机制,此外还将讨论应用程序如何与字符设备驱动程序进行交互,也即应用程序如何使用字符设备驱动程序提供的服务,这将涉及字符设备的文件系统接口等相关内容。
字符设备驱动程序所提供的功能是以设备文件的形式提供给用户空间程序使用,本章将首先讨论应用程序与设备文件,然后再深入探讨字符设备驱动程序的内核机制。