设备类型数字的含义是什么?

设备类型数字的含义是什么?

file /dev/*将一堆文件的描述打印为“块特殊(M/N)”和“字符特殊(M/N)”,其中M和N是数字。例如:

$ file /dev/null
/dev/null: character special (1/3)

man file似乎没有记录这些,但模糊地引用了man stat,这似乎将这些称为主要和次要设备类型。apropos 'device type'什么也没找到。那么这些数字意味着什么呢?

答案1

Unix 上的设备具有类型(例如字符或块)、主设备号(通常指驱动程序)和次设备号(通常指实例)。

因此,例如:

% ls -l /dev/vda
brw-rw---- 1 root disk 253, 0 Feb  3 09:09 /dev/vda

这是一个块设备,主设备 253,次设备 0。

如果我们看一下,/proc/devices我们会发现它以类似的内容结尾

Block devices:
  2 fd
259 blkext
  9 md
253 virtblk
254 mdp

所以我们可以看到253是“virtblk”。这是有道理的,因为这是一个带有虚拟磁盘的虚拟机!

对于该驱动程序来说,次设备号指的是设备中的块设备和分区

% ls -l /dev/vd*
brw-rw---- 1 root disk 253,  0 Feb  3 09:09 /dev/vda
brw-rw---- 1 root disk 253,  1 Feb  3 09:09 /dev/vda1
brw-rw---- 1 root disk 253,  2 Feb  3 09:09 /dev/vda2
brw-rw---- 1 root disk 253,  3 Feb  3 09:09 /dev/vda3
brw-rw---- 1 root disk 253, 16 Feb  3 09:09 /dev/vdb
brw-rw---- 1 root disk 253, 32 Feb  3 09:09 /dev/vdc
brw-rw---- 1 root disk 253, 33 Feb  3 09:09 /dev/vdc1

有一些特殊的驱动程序不涉及“真实”硬件。例如

% ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Feb  3 09:09 /dev/null

这是一个字符设备,主要 1,次要 3。 /proc/devices告诉我们驱动程序 1

  1 mem

我们可以看到这个“mem”驱动程序也处理一些其他设备

% ls -l /dev | grep ' 1, '
crw-rw-rw- 1 root root      1,   7 Feb  3 09:09 full
crw-r--r-- 1 root root      1,  11 Feb  3 09:09 kmsg
crw-r----- 1 root kmem      1,   1 Feb  3 09:09 mem
crw-rw-rw- 1 root root      1,   3 Feb  3 09:09 null
crw------- 1 root root      1,  12 Feb  3 09:09 oldmem
crw-r----- 1 root kmem      1,   4 Feb  3 09:09 port
crw-rw-rw- 1 root root      1,   8 Feb  3 09:09 random
crw-rw-rw- 1 root root      1,   9 Feb  3 09:09 urandom
crw-rw-rw- 1 root root      1,   5 Feb  3 09:09 zero

答案2

每个设备节点的类型(块或字符)和数字(称为主设备号和次设备号)用作内核的标识符。

在 Linux 上,维护了设备的规范列表及其功能的简要说明在内核中。您可以在那里看到主编号通常标识驱动程序(例如TTY 设备驱动程序)和次要编号标识该驱动程序管理的设备。

相关内容