在Linux操作系统中,设备驱动程序为各种设备提供了一致的访问接口,用户程序可以像对普通文件一样对设备文件进行打开和读写操作。Linux包含如下三类设备驱动程序:
(1)字符设备
Linux下的字符设备是指设备发送和接收数据以字符的形式进行。字符设备接口支持面向字符的I/O操作,数据不经过系统的快速缓存,由驱动本身负责管理自己的缓冲区结构。字符设备接口只支持顺序存取的有限长度的I/O操作。典型的字符设备包括串口、LED灯、键盘等设备。
(2)块设备
块设备是以块的方式进行I/O操作的。块设备是利用一块系统内存作缓冲区,用来临时存放块设备的数据。当缓存的数据请求达到一定数量,会对设备进行读写操作。块设备是主要针对磁盘等慢速设备设计的,以免读写设备耗费过多的CPU时间。块设备支持随机存取功能,也几乎可以支持任意位置和任意长度的I/O请求。典型的块设备包括硬盘、CF卡、SD卡等存储设备。
(3)网络设备
Linux操作系统中的网络设备是一类特殊的设备。Linux的网络子系统主要是基于BSD UNIX的socket机制。在网络子系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。Linux操作系统支持对发送数据和接收数据的缓存,提供流量控制机制,也提供对多种网络协议的支持。(www.xing528.com)
Linux系统为每个设备分配了一个主设备号与次设备号,主设备号唯一标识了设备类型,次设备号标识具体设备的实例。由同一个设备驱动程序控制的所有设备具有相同的主设备号。从设备号则用来区分具有相同主设备号的不同设备。
每一个字符设备或块设备在文件系统中都有一个特殊设备文件与之对应,这个文件就是设备节点。网络设备在文件系统的/dev目录中没有节点,应用层可以通过套接字访问网络设备。字符设备和块设备的设备节点在/dev目录下面:
其中每行第一个字母为c表示字符设备,为b表示块设备。上面第4列就是设备的主设备号,第5列为设备的次设备号,最后一列为设备节点的名称。/dev下面有两个虚拟设备,即/dev/null与/dev/zero。/dev/null是一个空设备,写入与读取数据均没有反馈。cat afile>/dev/null将不会有输出。cat/dev/null>afile会清空afile文件的内容。访问/dev/zero会得到一段值为0的二进制流。如下面的语句用0填充t.txt文件:
#dd if=/dev/zero of=/home/t.txt bs=1024 count=768
另外字符设备与块设备也可以通过/proc/devices文件查看:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。