设备驱动的作用
驱动就是软件和硬件之间的中间层。OS负责提供驱动框架,驱动填写该框架的向上接口,同时将接口转换为对硬件的操作。一般而言,驱动不实现策略,只实现机制。举个例子,驱动可以提供机制,实现IO的翻转。用户层可以实现策略,用IO翻转实现流水灯、呼吸灯等功能。
内核功能划分
作者认为,Linux的功能可以划分为5大块,分别是进程管理、内存管理、文件系统、设备控制、网络,就像下图所示。

Linux是一种宏内核设计的内核,为了降低本身的复杂度,内核采用模块机制。从上图可以看到,内核是一个多模块组成的系统。驱动大多也是以模块的形式加载到内核的。
设备的类型
大家都知道,内核的设计思路是一切都是文件,硬件也是如此。硬件被抽象成硬件后具有不同的特性,内核按照这些特性的不同,将设备分成三类。
字符设备
字符设备就是具有串行处理特性的设备,用起来就像字节流,往往读过就过了,有一定的时效性,就像听收音机。
块设备
块设备就是可以成块访问的,可以修改当前访问的位置,向前跳,向后跳。像看光盘上的电影,可以快进快退。
Socket
Socket一般用于网络数据传输,可以读也可以写,和字符设备有一定相似性。但是Socket往往有两个或多个对等的端点,注重数据交换这个特性。