设备伪文件系统可以挂载为/dev在这种情况下,它会替换传统的 Linux 设备子目录。或者,它可以挂载到其他位置(例如/devfs),并补充现有的设备结构。
如果没有 devfs,设备名称通常维护在dev根分区目录中。因此,设备名称(及其关联的权限)具有文件系统持久性。设备名称的存在并不一定意味着存在这样的设备(甚至其驱动程序)。为了避免用户必须创建设备名称条目(使用 mknod 命令),大多数 Linux 发行版都预定义了数千个设备名称在/dev目录中。当应用程序尝试 open() 设备名称时,errno 值 ENODEV 表示当前没有相应的设备(或驱动程序)可用。
Devfs 采用不同的方法,其中设备名称的存在与相应设备(及其驱动程序)的存在直接相关。
假设 devfs 挂载在/dev,那么 SCSI 设备的主要设备名称可能如下所示
/dev/scsi/host0/bus0/target1/lun0/disc [whole disk] /dev/scsi/host0/bus0/target1/lun0/part6 [partition 6] /dev/scsi/host0/bus0/target1/lun0/generic [sg device for disk] /dev/scsi/host1/bus0/target2/lun0/cd [CD reader or writer] /dev/scsi/host1/bus0/target2/lun0/generic [sg device for cd] /dev/scsi/host2/bus0/target0/lun0/mt [tape mode 0 rewind] /dev/scsi/host2/bus0/target0/lun0/mtan [tape mode 3 no rewind] /dev/scsi/host2/bus0/target0/lun0/generic [sg device for tape] |
[请注意 “disc” 的拼写,因为 devfs 作者偏爱英式拼写而不是美式拼写。] 可以看出,devfs 的命名方案与 第 3.1 节 中讨论的 SCSI 寻址非常匹配。值得注意的是,IDE 子系统使用类似的 devfs 设备命名方案,其中 “scsi” 替换为 “ide”。关于 Devfs 的更多讨论请参见 第 12 章。