有关 devfs 的主要文档可以在以下位置找到:参考 W5。SCSI 子系统的 devfs 命名约定在第 3.3 节中概述。devfs 通过内核构建选项 CONFIG_DEVFS_FS 选择,以及它是否在启动时挂载(作为/dev)由内核构建选项 CONFIG_DEVFS_MOUNT 控制。后者可以通过内核启动时选项“devfs=mount”或“devfs=nomount”来覆盖,以适当的方式。
devfs SCSI 节点名称及其默认权限如下:
disc rw------- whole disk including mbr part1 rw------- first partition {...p1} ... part15 rw------- 15th partition {...p15} cd rw-rw-rw- cd or dvd devices mt rw-rw-rw- tape mode 0 with rewind {...m0} mtl rw-rw-rw- tape mode 1 with rewind {...m1} mtm rw-rw-rw- tape mode 2 with rewind {...m2} mta rw-rw-rw- tape mode 3 with rewind {...m3} mtn rw-rw-rw- tape mode 0 with no rewind {...m0n} mtln rw-rw-rw- tape mode 1 with no rewind {...m1n} mtmn rw-rw-rw- tape mode 2 with no rewind {...m2n} mtan rw-rw-rw- tape mode 3 with no rewind {...m3n} generic rw-r----- |
只有在相应的设备(或设备的子实体(例如分区))和驱动程序存在时,这些节点名称才存在。例如,如果没有 sg 驱动程序,则没有“generic”设备名称。上面括号中出现的字符串将附加到下面概述的缩写“c0b0t0u0”表示法中,视情况而定。
作为块或字符特殊文件的 devfs 文件名将在本描述中称为主要设备名称。名为 devfsd 的 devfs 守护程序引入了许多指向这些主要设备名称的符号链接。这样做既是为了向后兼容,也是为了方便。这些符号链接将被称为辅助设备名称。
辅助设备名称由通常位于以下位置的 devfsd 配置文件控制:/etc/devfsd.conf。以下是使用默认 devfsd.conf 文件时的辅助设备名称列表:
Secondary name slink to this primary device name -------------------------------------------------------------- /dev/sda /dev/scsi/host0/bus0/target2/lun0/disc /dev/sda1 /dev/scsi/host0/bus0/target2/lun0/part1 /dev/sd/c0b0t2u0 /dev/scsi/host0/bus0/target2/lun0/disc /dev/sd/c0b0t2u0p1 /dev/scsi/host0/bus0/target2/lun0/part1 /dev/sr0 /dev/scsi/host0/bus0/target4/lun0/cd /dev/sr/c0b0t4u0 /dev/scsi/host0/bus0/target4/lun0/cd /dev/st0 /dev/scsi/host1/bus0/target0/lun0/mt /dev/nst0a /dev/scsi/host1/bus0/target0/lun0/mtan /dev/st/c1b0t0u0m0 /dev/scsi/host1/bus0/target0/lun0/mt /dev/st/c1b0t0u0m3n /dev/scsi/host1/bus0/target0/lun0/mtan /dev/sg0 /dev/scsi/host0/bus0/target2/lun0/generic /dev/sg1 /dev/scsi/host0/bus0/target4/lun0/generic /dev/sg2 /dev/scsi/host1/bus0/target0/lun0/generic /dev/sg/c0b0t2u0 /dev/scsi/host0/bus0/target2/lun0/generic /dev/sg/c0b0t4u0 /dev/scsi/host0/bus0/target4/lun0/generic /dev/sg/c1b0t0u0 /dev/scsi/host1/bus0/target0/lun0/generic |
请注意,更常见的/dev/scd0SCSI cdroms 的变体不受支持。还有/dev/discs, /dev/cdroms和/dev/tapes目录,其中包含指向属于该类别的所有设备(即,不仅是 SCSI 设备)的符号链接
Secondary name slink to this primary device ------------------------------------------------------------ /dev/discs/disc0 /dev/ide/host0/bus0/target0/lun0 * /dev/discs/disc1 /dev/scsi/host0/bus0/target2/lun0 * /dev/cdroms/cdrom0 /dev/ide/host0/bus1/target1/lun0/cd /dev/cdroms/cdrom1 /dev/scsi/host0/bus0/target4/lun0/cd /dev/tapes/tape0 /dev/scsi/host1/bus0/target0/lun0 * |
标有“*”的条目是包含主设备(primary devices)的目录。请注意,IDE/ATA 设备列在 SCSI 设备之前。这些辅助设备名称模仿与主要设备名称相同的持久性规则。因此,当 SCSI 设备 (?) 或其较低级别的驱动程序或其较高级别的驱动程序被移除时,与其关联的主要设备名称和辅助设备名称也会被移除。
当 devfs 作为/dev挂载时,旧的“/dev/sda6”类型仍然可以在某些上下文中使用。如果在内核启动时提示需要键入内容,这可能会很方便。例如,如果用户想要更改“devfs”机器上的根分区,则可以使用以下任何示例作为内核启动时选项
root=/dev/sda6 root=/dev/scsi/host0/bus0/target0/lun0/part6 root=/dev/sd/c0b0t0u0p6 |
许多设备扫描程序希望看到 pre-devfs 设备名称,并且需要一些时间才能识别 devfs。此外,某些程序依赖于/dev/sg0的打开操作(例如)来加载 sg 驱动程序(假设它是一个模块并且尚未加载)。这可以通过/etc/devfsd.conf文件中的条目来安排,并且以下内容位于
LOOKUP sg.* MODLOAD |
probeall /dev/sg scsi-hosts sg alias /dev/sg* /dev/sg |
可以使用/etc/devfsd.conf文件中的此条目更改 sg 设备的权限
REGISTER scsi/host.*/bus.*/target.*/lun.*/generic PERMISSIONS 0.0 rw-rw-rw- |
应用程序可以通过文件/dev/.devfsd.
是否存在来确定 devfs 是否处于活动状态。基于持久性文件系统(例如 ext2)的 /dev 目录的一个特性是能够将权限与设备文件名相关联,并在每次启动时保留它们。如上所述,devfs 的默认操作是在每次机器启动时重新分配设备文件名权限。/etc/devfsd.conf中的 PERMISSIONS 操作可用于断言权限,但这可能被认为有点尴尬。devfs 文档 (W5) 描述了一种获得两全其美的方法。此技术依赖于 lk 2.4 中最近添加的在多个点挂载同一文件系统的功能。