`/dev/pts/ptmx` 来自哪里?

炸鱼薯*_*德里克 4 linux pty

在我的 Archlinux 上,/dev/pts是由 devpts 挂载的,那么谁创建了 /dev/pts/ptmx设备节点?这个节点的目的是什么?它与 相同(Major=5 Minor=2)设备节点/dev/ptmx/,但访问模式不同,这是为了什么?

Jde*_*eBP 16

旧的AT&T系统5机制伪终端从设备是它们是普通的持久性下字符的设备节点/dev。有一个多路复用器主设备/dev/ptmx。为伪终端设备旧4.3BSD机构具有平行对普通的持久性下主从设备节点/dev。这些是普通磁盘文件系统上的特殊设备节点。

在 OpenBSD 上,其中一些现在仍然适用。 /dev仍然是一个磁盘卷,从设备仍然是真正的磁盘节点。然而,它们是按需创建的。当PTMGET在/dev/ptm设备上发出I/O 控制时,内核在内部发出相关调用以在那里创建新设备节点。

在 FreeBSD 上,这些都不是真的。甚至不再有多路复用器设备。 /dev根本不是光盘卷。它是一个devfs文件系统。从设备出现在devfs其pts/目录下的文件系统中以响应posix_openpt()系统调用,这是一个彻底的系统调用,而不是包装ioctl()在打开的文件描述符上到某些“多路复用器”设备。

有一段时间在 Linux 上,伪终端从设备是持久设备节点。您正在查看的是它devpts与devtmpfs. 这几乎允许与在 FreeBSD 上使用devfs.

但也有一些区别。特别是,还有一个“多路复用器”设备。

  • 在较旧的“新”devpts系统中,这是ptmx不同devtmpfs文件系统中的设备,文件devpts系统仅包含自动创建/销毁的从设备文件。传统上,设置是/dev/ptmx和一个随附的devpts安装在/dev/pts.
  • 但Linux的人想拥有多个完全独立的实例devpts文件系统,用于容器等,这被证明是相当困难的时候出现了同步的(正确的)两个文件系统很多 devtmpfs和devpts文件系统。因此,在较新的“新”devpts系统中,所有设备、多路复用器和从设备都在一个文件系统中。

    为了向后兼容,默认设置是新ptmx节点不可访问,除非设置新的ptmxmode挂载选项。在向后兼容模式下,您仍然可以以较旧的单实例方式运行事物,并且默认情况下会这样做,除非newinstance在安装devpts.

  • 在连新的还是“新” devpts(自2016年一直围绕)每个实例的多路复用器的设备devpts文件系统是现在的首要多路复用器,以及ptmx在devtmpfs为内核提供一个垫片,它试图模仿的符号链接,一个绑定安装,或一个普通的旧实际符号链接到pts/ptmx. 多实例方式现在是唯一的方式。

进一步阅读