当有人说 UNIX 设备文件是静态的时,这意味着什么?

str*_*gee 5 udev history

我一直在阅读udev。在“概述”部分,维基百科指出“与传统的 Unix 系统不同,/dev 目录中的设备节点是一组静态文件,Linux udev 设备管理器动态地仅提供实际存在于设备上的设备的节点。系统”。

当它说“静态文件集”时是什么意思?这是否意味着总是有/dev文件但它们并不总是指向真实设备?

slm*_*slm 11

我假设你指的是这一段:

与传统的 Unix 系统不同,/dev 目录中的设备节点是一组静态文件,Linux udev 设备管理器动态地仅为系统上实际存在的设备提供节点。尽管 devfs 曾经提供类似的功能,但 Greg Kroah-Hartman 列举了许多原因3,认为其实现优于 devfs:

从第一句开始,他们指的是其他 Unix 系统,其中的设备/dev是静态创建的,并且从重新启动到重新启动都保持不变。以前版本的 Linux(想想 2.4 版本的内核)也曾经以这种方式工作,较新的版本不再以这种方式工作。其他 Unix 系统通常在您安装它们时包含一组通用的设备文件,并且很少需要手动创建其他设备文件。

在 2.4 中,您可以使用该mknod命令手动创建任何必要的设备文件。例如:

$ mknod ./dev/random b 12 5
Run Code Online (Sandbox Code Playgroud)

注意:这表示创建/dev/random文件描述符,作为主设备编号为 12 和次要设备编号为 5 的块设备。

/dev 下的设备文件

OP 询问了以下有关/dev目录整体功能的后续问题。这是他的问题:

您能否添加有关用于在重新启动时保留设备文件的技术方法的详细信息?它们如何物理存储在磁盘上?他们需要特殊的文件系统支持吗?

在研究这一点时,我想我会从Linux From Scratch 项目开始,以了解如何/dev在较新版本的 Linux 内核中进行管理的基本概念。我知道,在过去的(想想内核版本2.4及以前)的/dev目录是一组静态字面上拿起空间在硬盘上的文件,但随着的到来udevsysfs这已不再是如此。

传统上,这些特殊文件是在安装时由发行版使用mknod命令创建的。近年来,Linux 系统开始使用在运行时udev管理这些/dev文件。例如,udev将在检测到设备时创建节点并在移除设备时删除它们(包括运行时的热插拔设备)。这样,/dev目录(在大多数情况下)仅包含当前系统上实际存在的设备的条目,而不是可能存在的设备。

不必担心/dev. 该目录现在完全由重新启动udevsysfs重新启动管理。

附加udevsysfs资源

参考

  • 此外,为了记录起见,需要手动创建设备文件的评估者很少(并且仍然是)。大多数操作系统会在安装时使用大量设备文件填充 /dev,这些文件将涵盖大多数用途。人们通常只需要/必须使用不寻常的硬件组合来创建它们。我在基于 OpenBSD 的串行控制台服务器上执行此操作,该服务器具有 3 个 8 端口串行卡。 (3认同)