文章目录
  1. 1. 字符设备和块设备
  2. 2. 设备号
    1. 2.1. 设备号的获取
    2. 2.2. 分配设备号

百合子

Linux系统将设备分为3种类型,分别是字符设备、块设备、和网络接口设备。其中字符类设备和块设备难以区分。
字符设备可以必须按照先后顺序读写,而块设备则 定位到任意位置。

字符设备和块设备

**1.字符设备:**字符设备是指那些一个字节一个字节读写数据的设备,不能随机读取设备内存中的某一数据。

其读取数据需要按照先后顺序

从这点看字符设备是面向数据流的设备,常见的字符设备有**鼠标、串口、控制台 、LED**等设备。

2.块设备:块设备是指哪些可以从设备的任意位置读取一定长度的数据设备。

其读取设备不必不必按照先后顺序,可以定位到设备的某一具体位置。

常见的块设备有硬盘、磁盘、U盘、SD卡等。

tips:

1. 可以通过ls -l查询区别字符设备和块设备

1
2
3
4
5
root@ubuntu:/dev# ls -l
total 0
/* 一 二 三 四 五 六 七:最后修改时间 八:名称
crw-rw---- 1 root video 10, 175 Dec 8 01:40 agpgart
crw------- 1 root root 10, 58 Dec 8 01:40 alarm
  • 第一字段 的第一个字符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();

文章目录
  1. 1. 字符设备和块设备
  2. 2. 设备号
    1. 2.1. 设备号的获取
    2. 2.2. 分配设备号