当我第一次开始使用 Ubuntu 时,我认为我的 CD 驱动器是通过/dev/cdrom0and/dev/cdrom1等映射的,但是今天看看,你可以看到它们现在通过sr前缀来实现:
$ ll /dev/{cdrom,sr*}
lrwxrwxrwx 1 root root 3 Feb 10 09:15 /dev/cdrom -> sr0
brw-rw----+ 1 root cdrom 11, 0 Feb 10 09:15 /dev/sr0
brw-rw----+ 1 root cdrom 11, 1 Mar 27 10:30 /dev/sr1
Run Code Online (Sandbox Code Playgroud)
我只是好奇这代表什么。TLDP 在这里不是很有帮助;它仍然sd列为“SCSI 驱动器”,我认为现在它更常表示“串行驱动器”。
“sr”是什么意思?为什么/dev/cdrom还存在?
Linux的小号CSI d ISK支撑模块= SD _mod
Linux S CSI T ape 支持模块 = st
Linux SCSI CDrom 支持模块 = sr_mod
Linux S CSI g通用支持模块 = sg
所以,很可能,这代表S CSI CD r om
我注意到这并没有完全解决这个问题。
如您所见,/dev/cdrom只是指向 的符号链接/dev/sr0,它是实际设备。
字符设备的命名取决于初始化它的模块:SCSICD-ROM 由sr_mod模块处理,它们以模块本身命名 ( srX)。
如果您的 CD-ROM 驱动器碰巧是一个IDE驱动器,则实际设备的名称应该是/dev/hdX.
所以,因为有通过其CD-ROM驱动器可以连接到系统多个接口,/dev/cdrom用于总是指向第一个CD-ROM设备(SCSI,IDE或其他),最有可能给驱动器的任何一个独特的通用接口需要在系统中使用。
CDROM 设备名称不是由统一的 CDROM 层维护,而是由每个单独的协议栈维护。在 SCSI 子系统的情况下,设备名称由 sr 驱动程序维护,而 IDE 子系统通过其中央“ide”驱动程序(即不是由 ide-cd 驱动程序)维护设备名称。USB 和 IEEE1394 cd 设备名称由它们各自的堆栈维护。这可以部分解释为什么 /dev/cdrom 通常是指向适当子系统设备名称的符号链接。