Linux字符设备驱动

1. Linux设备类型

Linux内核中的设备可分为三类:字符设备、块设备和网络设备。
字符设备(Character device):适合面向字符的数据交换,因其数据传输量较低。对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流。他不具备缓冲区,所以对这种设备的读写是实时的,如终端、磁带机、串口、键盘等。
块设备(Block device):是一种具有一定结构的随机存取设备,对这种设备的读写是按固定大小的数据块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或从设备中一次性读出放入到缓冲区。块设备通常都是以安装文件系统的方式使用的——这也是块设备一般的访问方式。
每个字符设备和块设备都有与之对应的设备文件,这种文件并不指向磁盘或其他存储介质上的数据,只是用来建立与某个设备驱动程序的关联,让应用程序可以像访问普通文件一样来访问和操作设备,而无需过多关注设备之间的差异。正如下图所示:
这里写图片描述

Linux驱动程序中字符设备和块设备的几点区别:

  • 字符设备只能以字节为最小单位访问,而块设备以固定长度的块为单位,例如512字节,1024字节等,即使只请求一个字节的数据,也会从设备中取出完整块的数据;
  • 块设备可以随机访问(在数据中的任何位置进行访问),但是字符设备不做要求(有些字符设备可以提供数据的随机访问,驱动程序可选择是否实现);
  • 块设备的读写会有大规模的缓存,已经读取的数据会保存在内存中,如果再次读取则直接从内存中获得,写入操作也使用了缓存以便延迟处理,减少了IO次数和占用的CPU时间。而字符设备每次的读写请求必须与设备交互才能完成,因此没有必要使用缓存。

网络设备(Network device):网络设备用于管理系统中的(物理或虚拟)网卡,处理网口上网络数据的收发,并提供协议栈和特定网卡之间关联的统一接口。和字串设备/块设备不同的是,网络设备在/dev下面不会有对应的设备文件,而是通过net_device结构来定义网卡提供的服务并可供用户程序读取和配置(如配置IP地址等)。和字符设备类似,网络设备不会关联到实际的存储介质或特定文件系统上。

2. 设备文件

2.1 文件属性

一个设备文件对应的设备并不是通过其文件名标识,而是通过文件的主、从设备号标识的。这些号码在系统中作为特别的文件属性管理。

root@openwrt:/bin# ls -l /dev/mtdblock* /dev/ttyS*
brw-r--r-- 1 root  root  31,  0 Jan  1  1970 /dev/mtdblock0
brw-r--r-- 1 root  root  31,  1 Jan  1  1970 /dev/mtdblock1
brw
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值