Q&A

  1. 什么是驱动?

驱动本质上是一个软件程序,是内核与硬件之间通信的桥梁,为应用程序屏蔽了硬件细节。

内核可以通过驱动程序去初始化、释放设备,内核可以通过驱动程序与设备做双向的数据交互,驱动程序同时需要检测和处理设备出现的错误。有了驱动,内核可以把硬件当做一个文件去直接操作。

  1. 驱动分为几类?

驱动的分类主要取决于设备的分类,Linux系统将设备分为三种:1. 字符设备;2. 块设备;3. 网络接口设备,与之相对应,驱动分为:1. 字符设备驱动;2. 块设备驱动;3. 网络接口设备驱动。

  • 字符设备驱动

字符设备驱动,顾名思义,即实现内核可以通过字节流的方式访问设备的软件,构建一个只能顺序访问的通道。驱动程序起码需要实现基本的open、close、read、write系统调用。linux系统中可在/dev/下找到设备,以文件的形式存在,同样可以用文件系统节点来访问。例如,终端输出/dev/console,串口/dev/tty0等。

  • 块设备驱动

块设备主要指的是各种存储类的设备,比如flash、硬盘、u盘等。块设备与字符设备类似,内核同样可以通过文件系统节点访问设备,设备同样在/dev/目录下可以找到,Linux上可以读写任意大小的字符而不一定以块为单位。但不同于字符设备的是,块设备可以存放文件系统,且驱动程序对接内核的接口完全不同于字符设备驱动。

  • 网络接口设备

网络接口设备与其他两种设备不同,无法通过系统节点访问,不存在于设备文件系统/dev/中。网络接口驱动为系统的网络操作提供一致的操作来处理数据的接收和发送,屏蔽了各种各样网络设备带来的影响。