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

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

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

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

答案1

我假设您指的是这一段:

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

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

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

$ mknod ./dev/random b 12 5

笔记:这表示创建/dev/random文件描述符,作为主设备号为 12、次设备号为 5 的块设备。

/dev下的设备文件

OP 就目录的整体功能提出了以下后续问题/dev。这是他的问题:

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

在研究这个问题时,我想我应该从Linux 从头开始​​项目了解如何/dev在较新版本的 Linux 内核中进行管理的基本概念。我知道在过去(想想内核版本 2.4 及之前),/dev目录是一组静态文件,实际上占用了 HDD 上的空间,但随着 的出现,udev情况sysfs不再是这样了。

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

不得不担心/dev.该目录现在完全由重新启动udev和重新启动管理sysfs

附加udev资源sysfs

参考

答案2

“设备文件”是一种特殊类型的文件(与目录、符号链接、命名管道和 unix 域套接字是特殊类型的文件大致相同)。它们不直接存储用户数据,而是存储主设备号和次设备号以及设备类型(字符或块)。为类 Unix 系统设计的文件系统将支持存储设备文件。

当应用程序或通过安装命令访问“设备文件”时,将从文件系统中检索主设备号和次设备号以及设备类型。根据这些数字,内核选择驱动程序并打开它。

传统上,设备文件仅存在于根文件系统上名为 /dev 的目录中,通常由名为“MAKEDEV”的工具创建,该工具读取配置文件并创建设备节点。这被称为静态设置,并且被几乎所有类 UNIX 操作系统(包括 Linux)使用了很多年。这种方法有一些缺点。

  • 即使当前系统中不存在相应的硬件,设备文件也存在。很难判断哪些硬件存在或不存在。
  • 如果内核升级引入了新的设备类型,那么管理员可能必须手动为它们创建设备节点。
  • 主要编号和次要编号的供应有限,为每个可能的设备节点静态分配一对(请记住,由于分区,一个物理设备可以有许多设备节点)不可扩展。

linux解决这个问题的第一次尝试称为devfs(其他一些类unix操作系统也有一个称为devfs的文件系统但我不知道细节)。这是一个虚拟文件系统,内核将在其中提供设备节点。事实上它相对胎死腹中,无论你喜欢与否,它都推出了自己的非标准设备命名方案,并且与静态 /dev 相比并没有提供巨大的优势

后来udev出现了。这使用了不同的模型。 tmpfs 安装在 /dev 上,用户空间守护进程根据来自内核的通知管理其中的设备节点。https://lwn.net/Articles/65197/

最近还出现了一种叫做 devtmpfs 的东西。这似乎是一种妥协,内核创建一组基本设备节点,但如果需要更复杂的功能,用户空间可以接管。

答案3

在 Altos 386 (i386/SCO SysV Unix) 系统上,必须在内核升级(或重新安装)时创建的静态设备的一个示例是过多的 /dev/mt 条目以支持 SCSI HP Dat Tape 单元。主要编号用于 SCSI 总线上的磁带驱动程序,次要编号用于 SCSI 设备编号和功能(原始、倒带,不包括倒带)。有两条 SCSI 总线,它们可以支持多个混合磁带单元,并在每条总线上安装 HD 扩展文件系统。

dev 只是用 MAKEDDEV 创建的根文件系统中的条目。出于实用目的,它们可以链接到更可用的名称,以便 SCSI 设备 5 上的倒带设备可以链接到 /dev/st(SCSI 磁带,以将其与内置 DC300 单元区分开来)

后来,当我们开始使用 Slackware Linux 时,我们也必须这样做,并且必须手动修补 .99b 内核才能正确使用 3Com 3C509b 组合以太网卡。它们具有 5 类、BNC 和 AUI 连接器,游戏在启动时获得正确的接口

相关内容