20

里面的所有文件/dev都是特殊文件……它们代表计算机的设备。它们是使用mknod系统调用创建的。我的问题是:我如何知道用于创建此特殊文件的次要编号和主要编号?

4

5 回答 5

28

该列表称为LANANA Linux 设备列表,由 Alan Cox 管理。

您可以在线(直接链接)或在 Linux 源代码中找到最新的副本。它在内核树中的文件名是.Documentation/devices.txt

/dev要查看在(或任何设备节点)中创建节点的主要和次要编号,只需使用ls以下-l选项:

22:26 jsmith@undertow% ls -l /dev/xvd?
brw-rw---- 1 root disk    202,   0 Nov  1 20:31 /dev/xvda
brw-rw---- 1 root disk    202,  16 Nov  1 20:31 /dev/xvdb
brw-rw---- 1 root disk    202,  32 Nov  1 20:31 /dev/xvdc

在本例中,202是三个设备的主设备号,016、 和32是次设备。左边的b表示节点是块设备。另一种选择是c,一个字符设备:

crw-rw-rw- 1 root tty       5,   0 Nov 22 00:29 /dev/tty
于 2009-12-01T03:18:35.130 回答
9
$ ls -l /dev/fd0 /dev/null
brw-rw---- 1 根软盘 2, 0 Nov 22 19:48 /dev/fd0
crw-rw-rw- 1 root root 1, 3 Nov 22 19:48 /dev/null
$ stat -c '%n: %F, 主要 %t 次要 %T' /dev/fd0 /dev/null
/dev/fd0:块特殊文件,主要 2 次要 0
/dev/null:字符特殊文件,主要 1 次要 3

大多数设备号是固定的(即/dev/null始终是字符设备1:3),但在 Linux 上,有些是动态分配的。

$猫 /proc/设备
字符设备:
...
 10 杂项
...

块设备:
...
253 mdp
254 设备映射器
$猫 /proc/misc
...
 57 设备映射器
...

例如,在这个系统上,它只是碰巧/dev/mapper/control将是c:10:57,而其余的/dev/mapper/*将是b:254:*,这可能会因一个引导周期而异——甚至在加载/卸载模块和添加/删除设备时。

您可以在 中进一步探索这些设备注册/sys

$ readlink /sys/dev/block/2:0
../../devices/platform/floppy.0/block/fd0
$ cat /sys/devices/platform/floppy.0/block/fd0/dev
2:0
$ readlink /sys/dev/char/1:3
../../devices/virtual/mem/null
$ cat /sys/devices/virtual/mem/null/dev
1:3
于 2009-12-01T03:52:47.683 回答
5

您也可以使用统计信息。

$ stat -c 'major: %t minor: %T' <file>
于 2013-06-18T23:25:56.607 回答
2

特别是对于块设备:

$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda       8:0    0   90G  0 disk
├─sda1    8:1    0    4G  0 part [SWAP]
├─sda2    8:2    0    4G  0 part /
于 2015-10-28T16:43:03.630 回答
1

不依赖于的替代方案stat

$ cat /sys/class/*/random/dev
1:8
于 2017-04-26T16:34:52.510 回答