一、什么是驱动
操作系统是通过各种驱动程序来驱使硬件设备的,也就是说,驱动是操作系统内核与机器硬件之间的桥梁,它为内核操作硬件提供接口。驱动程序在Linux系统中以内核模块的形式存在,其编写方式遵循模块的编程方式。
驱动程序在系统的程序中介于HAL层与硬件层之间,向上与系统各部分衔接,向下处理硬件的各种操作请求。
1. 对设备初始化和释放。
2. 把数据从内核传送到硬件或者从硬件读取数据。
3. 读取应用程序传送给设备文件的数据或 回送应用程序请求的数据。
4. 监测和处理设备出现的错误。
二、驱动分类
Linux系统与驱动之间有标准的接口定义,驱动就是实现系统调用的接口(系统调用是操作系统内核与应用程序之间的接口)。Linux系统提供3种基本的设备驱动接口:1. 字符设备:数据传输以字节为单位,按照固定的顺序,以流的方式进行传递。是没有缓冲的,实时的如:LED、按键、摄像头、显卡、声卡、串口、触摸屏等。
2. 块设备:数据传输以块为单位,没有固定的顺序。带有文件系统和缓冲的,非实时的。如:U盘、硬盘SD卡等。
3. 网络设备:与网络相关的设备,如:网卡,有线网卡、无线网卡等。
其中,字符设备与块设备在Linux的/dev/下存在设备文件,而网络设备在Linux中没有对应的设备节点。但可通过查看/proc/net来了解当前系统中的网络设备。字符设备是应用最广、与用户应用程序联系最直接的驱动模型。