字符类设备驱动程序框架说明
总阅读次
Linux系统将设备分为3种类型,分别是字符设备、块设备、和网络接口设备。其中字符类设备和块设备难以区分。
字符设备可以必须按照先后顺序读写,而块设备则 定位到任意位置。
字符设备和块设备
**1.字符设备:
**字符设备是指那些一个字节一个字节读写数据的设备,不能随机读取设备内存中的某一数据。
其读取数据需要按照先后顺序
从这点看字符设备是面向数据流的设备,常见的字符设备有**鼠标、串口、控制台 、LED
**等设备。
2.块设备:
块设备是指哪些可以从设备的任意位置读取一定长度的数据设备。
其读取设备不必不必按照先后顺序,可以定位到设备的某一具体位置。
常见的块设备有硬盘、磁盘、U盘、SD卡等。
tips:
1.
可以通过ls -l
查询区别字符设备和块设备
1 | root@ubuntu:/dev# ls -l |
- 第一字段 的第一个字符
c
表示设备是字符设备。b
是块设备 - 第五、六字段分别表示设备的主设备号和次设备号,第七字段表示文件的最后修改时间。第八字段表示设备的名称
c
是字符设备,10是其主设备号,175是其次设备号,最后修改该时间是12月8日,设备名称是:agpart
2.
查看系统已存在的设备号
1 | root@ubuntu:~# cat /proc/devices |
设备号
一个字符设备或块设备都有一个主设备号和次设备号。
主/次设备号统称为设备号。
主设备号:用来表示一个特定的驱动程序。
在嵌入式系统中有2个LED指示灯,LED灯需要独立的打开或关闭。那么可以将2个LED灯主设备号注册为5,次设备号分别为1、2 。这里次设备号就分别表示2个LED灯,通过主设备号5和2个次设备号就可以分别对2个灯进行操作。
次设备号:用来表示使用该驱动程序的各设备
设备号的获取
使用MAJOR
得到设备号。
分配设备号
静态分配设备号
动态分配设备号
使用alloc_chrdev_region();