1. 概念
字符设备是Linux三大设备之一(另外两种:块设备、网络设备)。
字符设备:是指只能一个字节一个字节进行读写操作的设备,不能随机读取设备中的某一数据、读取数据要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED等。
Linux自带的字符设备和块设备一般都会在/dev目录(可以是任意目录,这样是为了统一)下对应一个设备文件,用户层程序通过设备文件来使用驱动程序操作字符设备或块设备。用户可以通过:ls /dev 命令查看所有设备文件。以字符“c”开头的代表字符设备,以字符“b”开头的代表块设备。如:
2. 字符设备、字符设备驱动与应用程序访问三者之间的关系
如图所示,为Linux字符设备、驱动以及应用程序之间的的关系。这里要说明几点:
1) 内核通过dev_t来唯一描述一个字符设备
旧的内核版本(2.6之前)定义其类型为16位为ushort型,高8位表示主设备号,低8位表示从设备号,主从设备号都有256个。随着系统规模的扩大(如SCSI存储阵列),设备数量渐渐超出了范围,于是将字符设备定义为32位整形,高12位代表主设备号,低20位代表从设备号。
强调:
内核提供相关宏(MAJOR、MINOR)从dev_t结构中获取主设备号或从设备号。为了把保证兼容,无论dev_t用多少位表示,都不应该自作主张直接对dev_t结