linux设备管理之主/次设备号

主设备号和次设备号

一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。
主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的其他设备。(主设备号和控制这类设备的驱动是一一对应的)
通俗的说就是主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务;而次设备号则用来标识具体且唯一的某个设备.
在同一个系统中,一类设备的主设备号是唯一的。比如:磁盘这类,次设备号只是在驱动程序内部使用,系统内核直接把次设备号传递给应用程序,由驱动程序管理。为了保证驱动程序的通用性,避免驱动程序移植过程中出现主设备号冲突,系统为设备编了号,每个设备号又分为主设备号和次设备号。
主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号。
注: 主设备号和次设备号,在不同磁盘的工具中都有输出显示,所以对于这个概念的理解还是很重要,否则你看不懂很多命令的输出。
尤其是 cat /proc/devices 输出的意义等。

设备的分类

以 Linux 的方式看待设备可区分为 3 种基本设备类型。 每个设备常常实现 3 种类型中的 1 种, 因此可分类成字符设备, 块设备, 或者一个网络设备。
 这种将设备分成不同类型或类别的方法并非是固定不变的。

 1、字符设备
 一个字符( char ) 设备是一种可以当作一个字节流来存取的设备( 如同一个文件 ); 字符驱动模块负责实现这种行为。
 这样的驱动模块至少实现 open, close, read, 和 write 系统调用。文本控制台( /dev/console )和串口( /dev/ttyS0 及其他 )是字符设备的例子, 因为它们很好地展现了流的抽象。 字符设备通过文件系统结点来存取, 例如 /dev/tty1 和 /dev/lp0。

 2、块设备
 如同字符设备, 块设备通过位于 /dev 目录的文件系统结点来存取. 一个块设备(例如一个磁盘)应该是可以驻有一个文件系统的。
 在大部分的 Unix 系统, 一个块设备只能处理特定的 I/O 操作, 即传送一个或多个长度经常是 512 字节( 或一个更大的 2 的幂的数 )的整块。
 Linux, 相反, 允许应用程序读写一个块设备象一个字符设备一样;它允许一次传送任意数目的字节。 
 结果就是, 块和字符设备的区别仅仅在内核内部管理数据的方式上, 和在内核/驱动的软件接口上不同。
 如同一个字符设备, 每个块设备都通过一个文件系统结点被存取的, 它们之间的区别对用户是透明的。 块驱动和字符驱动相比, 与内核的接口完全不同。

 3、网络接口设备
 任何网络事务都通过一个接口来进行, 就是说, 一个能够与其他主机交换数据的设备。
 通常, 一个接口是一个硬件设备, 但是它也可能是一个纯粹的软件设备, 比如回环接口(lo)。一个网络接口负责发送和接收数据报文, 在内核网络子系统的驱动下, 
 不必知道单个事务是如何映射到实际的被发送的报文上的。很多网络连接( 特别那些使用 TCP 的)是面向流的, 但是网络设备却常常设计成处理报文的发送和接收。
 网络驱动对单个连接一无所知; 它只处理报文。

设备名称

linux 系统下查找下主设备号

linux 系统采样,因为内核的版本对于/proc下的机制影响比较大,所以要注意版本

[root@fp-web-130 src]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

[root@fp-web-130 src]# uname -r

3.10.0-1160.45.1.el7.x86_64

[root@fp-web-130 src]# cat /proc/devices

//显示结果

Character devices: //字符设备

1 mem

4 /dev/vc/0

4 tty

4 ttyS

5 /dev/tty

5 /dev/console

5 /dev/ptmx

7 vcs

10 misc

13 input

21 sg

29 fb

99 ppdev

128 ptm

136 pts

162 raw

180 usb

188 ttyUSB

189 usb_device

202 cpu/msr

203 cpu/cpuid

226 drm

249 hidraw

250 usbmon

251 bsg

252 watchdog

253 rtc

254 tpm

Block devices: //块设备

259 blkext

7 loop //回环设备

8 sd //scsi设备

9 md

11 sr //只读光驱

65 sd

66 sd

67 sd

68 sd

69 sd

70 sd

71 sd

128 sd vcsa

129 sd vcsa1

130 sd vcsa2

131 sd vcsa3

132 sd vcsa4

133 sd vcsa5

134 sd vcsa6

135 sd

说明: sd,md,loop等就是设备名

参看: https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/devices.txt

实例:lsblk 命令可以查看块设备的主设备号和次设备号

解释:

loop0 的主设备号是 7:0 7表示的主设备号,0是系统为loop0回环设备编了号.这个主从就表示了唯一性([root@fp-web-130 src]# cat /proc/devices 得到的回环设备loop是7)

loop1 的主设备号是 7:1 7表示的主设备号,1是系统为loop1回环设备编了号.

基本上如果主设备号和次设备号明白了,那么lsblk这个命令的基本输出结果理解上就没有难度了

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值