7.12.1. CD-ROM symlinks
我们可能装一些软件用到 cdrom dvd 等,因此我们会需要把 /dev/cdrom /dev/dvd 的符号链接加在/etc/fstab中。对于每一个CD-ROM 设备,在 /sys 下找到相应的目录(例如, /sys/block/hdd) ,然后运行如下命令:udevtest /block/hdd
观察一下包含很多 *_id 输出的程序的行。
有两种方法可以创建symlinks,可以用model名及序号,或是用设备在总线上的位置。 以第一种方法,可以创建如下文件:
cat >/etc/udev/rules.d/82-cdrom.rules << EOF
# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_MODEL}=="SAMSUNG_CD-ROM_SC-148F", \
ENV{ID_REVISION}=="PS05", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_MODEL}=="PHILIPS_CDD5301", \
ENV{ID_SERIAL}=="5VO1306DM00190", SYMLINK+="cdrom1 dvd"
EOF
注意:
这个例子能正常工作,但 udev 不能识别 \ 的继续上一行功能,所以若要用编辑器来编辑 udev 的规则时,一定要保证每行只有一个命令。
做完这些symlinks就会保持正常工作状态,即使把cdrom移到 IDE 总线的其他位置上也能正常工作。但是如果使用新的驱动器来替换原来的 SAMSUNG CD-ROM,/dev/cdrom 符号链接将不会被创建。
SUBSYSTEM=="block" 关键字是为了避免匹配一般的 SCSI 设备。 在没有这个关键字的情况下,若同时存在两个 SCSI CD-ROM, 这个符号链接有时会指向 /dev/srX 设备 ,但有时会错误的指向 /dev/sgX。
第二种方法的步骤:
cat >/etc/udev/rules.d/82-cdrom.rules << EOF
# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
ENV{ID_PATH}=="pci-0000:00:07.1-ide-0:1", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
ENV{ID_PATH}=="pci-0000:00:07.1-ide-1:1", SYMLINK+="cdrom1 dvd"
EOF
这样,即使你使用不同的 model 来替换原来的设备,符号链接仍然是正确的,它指向在 IDE 总线上旧的位置。 ENV{ID_TYPE}=="cd" 关键字是为了确保符号链接在总线上的那个位置放的不是 CD-ROM 时,能够消失。
当然把两种方法混合使用也是可以的。
7.12.2. Dealing with duplicate devices
在 7.4. LFS 系统的设备和模块处理 提到过, /dev 下相同功能设备的顺序是随机的。例如,你有一个 USB 的网络摄像头和一个 TV 的调谐器,有时 /dev/video0 指向网络摄像头,/dev/video1 指向调谐器,但是在重启之后可能就会改变。除了网卡和声卡之外的其他设备,都可以通过创建 udev 的规则来定制固定的符号链接。网卡的解决 方法请见 7.13. 配置网络脚本 ,声卡解决方法请见 BLFS。
每一个设备都可能有这个问题(即使这个问题在你现在的发行版中不存在),在 /sys/class 或 /sys/block 下找到相应的目录。 对于视频设备,可能是 /sys/class/video4linux/videoX。 找出标记设备唯一性的属性(通常是 设备提供商、产品 ID 以及序列号):
udevinfo -a -p /sys/class/video4linux/video0
接下来,写一个创建符号链接的规则,例如:
cat >/etc/udev/rules.d/83-duplicate_devs.rules << EOF
# Persistent symlinks for webcam and tuner
KERNEL=="video*", SYSFS{idProduct}=="1910", SYSFS{idVendor}=="0d81", \
SYMLINK+="webcam"
KERNEL=="video*", SYSFS{device}=="0x036f", SYSFS{vendor}=="0x109e", \
SYMLINK+="tvtuner"
EOF
结果 /dev/video0 和 /dev/video1 设备仍然随机指向调谐器和网络摄像头(因此不应当直接使用),但是符号链接 /dev/tvtuner 和 /dev/webcam 总是指向正确的设备。
关于书写 Udev 规则的更多信息,可以查看 /usr/share/doc/udev-096/index.html。
下一节:本节仅适用于需要配置网卡的情况。
如果不使用网卡,就不需要创建关联网卡的配置文件,这样的话,在所有运行级目录(/etc/rc.d/rc*.d) 下删除 network 符号链接。