为什么我打不开这些设备节点?

为什么我打不开这些设备节点?
[root@archlinux xtricman]# ls -l /dev/pts
total 0
crw--w---- 1 xtricman tty  136, 0 Feb 24 19:24 0
c--------- 1 root     root   5, 2 Feb 24 19:10 ptmx
[root@archlinux xtricman]# ls -l /mnt
total 12
brw-r--r-- 1 root root 136, 0 Feb 24 19:17 dev_node
crw-r--r-- 1 root root 136, 0 Feb 24 19:17 dev_node_c
drwx------ 2 root root  12288 Feb 24 19:12 lost+found
[root@archlinux xtricman]# exec 6<>/dev/pts/0
[root@archlinux xtricman]# exec 7<>/mnt/dev_node
bash: /mnt/dev_node: No such device or address
[root@archlinux xtricman]# exec 7<>/mnt/dev_node_c
bash: /mnt/dev_node_c: Input/output error

/dev/pts是 devpts 的挂载点,/mnt是 ext4 的挂载点。

我想知道,由于三个设备节点(/dev/pts/0/mnt/dev_node/mnt/dev_node_c)的主设备号和次设备号都相同,为什么我只能打开一个/dev/pts/0而不能打开另外两个?

即使我能理解(major=136,minor=0)的块设备不存在,那么字符设备(major=136,minor=0)的“输入/输出错误”是什么意思?为什么我会收到此错误?

答案1

嗯,dev_node是一个块设备(b输出中行开头的ls说明了这一点),所以它与其他设备完全不同。它只是碰巧具有相同的主设备号,但块设备和字符设备之间的编号没有关联。

Documentation/admin-guide/devices.txtLinux 内核源代码中讲述了它是什么:

 136 block      Mylex DAC960 PCI RAID controller; ninth controller
                  0 = /dev/rd/c8d0      First disk, whole disk

您可能没有 Mylex RAID 控制器,更不用说对于他们来说,这No such device or address似乎是一个适当的回应。

dev_node_c虽然看起来和你的一样/dev/pts/0。但其中的设备节点/dev/pts是自动生成的,有一个特殊的虚拟文件系统(devpts)。像往常一样,它显示在 的输出中mount

devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) 

我测试了这一点,确实将设备节点从那里复制/dev/pts/15到另一个文件系统不起作用。另外,安装 的另一个副本devpts似乎会创建一个干净的实例,其中的伪 tty/dev/pts在另一个副本中不可见。因此,伪 tty 节点确实可能与devpts文件系统的特定实例相关联,因此节点在其之外根本无法工作。

相关内容