关于设备

尽管 BLFS 及更高版本中包所需的大多数设备都由 udev 使用 LFS 在 /etc/udev/rules.d 中安装的默认规则正确设置,但在某些情况下必须修改或扩充规则。

多个声卡

如果系统中有多个声卡,“默认”声卡会变为随机。建立声卡顺序的方法取决于驱动程序是否为模块。如果声卡驱动程序编译进内核,则通过 /boot/grub/grub.cfg 中的内核命令行参数进行控制。例如,如果系统同时拥有 FM801 卡和 SoundBlaster PCI 卡,则可以将以下内容附加到命令行:

snd-fm801.index=0 snd-ens1371.index=1

如果声卡驱动程序构建为模块,则可以在 /etc/modprobe.conf 文件中通过以下方式建立顺序:

options snd-fm801 index=0
options snd-ens1371 index=1

USB 设备问题

USB 设备通常有两种与之关联的设备节点。

第一种由内核中的设备特定驱动程序(例如 usb_storage/sd_mod 或 usblp)创建。例如,USB 大容量存储设备为 /dev/sdb,USB 打印机为 /dev/usb/lp0。这些设备节点仅在设备特定驱动程序加载时才存在。

第二种设备节点(/dev/bus/usb/BBB/DDD,其中 BBB 是总线编号,DDD 是设备编号)即使设备没有内核驱动程序也会被创建。通过使用这些“原始”USB 设备节点,应用程序可以与设备交换任意 USB 数据包,即绕过可能存在的内核驱动程序。

当用户空间程序充当设备驱动程序时,需要访问原始 USB 设备节点。但是,要使程序成功打开设备,必须正确设置权限。默认情况下,出于安全考虑,所有原始 USB 设备由用户 root 和组 root 拥有,权限为 0664(需要读取权限,例如,使 lsusb 工作以及程序访问 USB 集线器)。包含用户空间 USB 设备驱动程序的包(例如 SANE 和 libgphoto2)也会附带 udev 规则,更改受控原始 USB 设备的权限。也就是说,SANE 安装的规则会更改已知扫描仪的权限,但不会更改打印机的。如果包维护者忘记为您的设备编写规则,请向 BLFS(如果该包在其中)和上游报告错误,并且您将需要编写自己的规则。

在 Linux-2.6.15 之前,原始 USB 设备访问不是通过 /dev/bus/usb/BBB/DDD 设备节点进行的,而是通过 /proc/bus/usb/BBB/DDD 伪文件进行的。某些应用程序仍然仅使用这种已弃用的技术,并且无法使用新的设备节点。它们无法与 Linux 内核 3.5 或更高版本一起工作。如果您需要运行此类应用程序,请联系其开发人员以获取修复。

Udev 设备属性

可以通过创建额外的 udev 规则来微调设备属性(例如组名和权限),匹配类似以下内容。供应商和产品可以通过搜索 /sys/devices 目录条目或在设备连接后使用 udevadm info 找到。有关详细信息,请参阅当前 udev 目录中 /usr/share/doc 的文档。

SUBSYSTEM=="usb_device", SYSFS{idVendor}=="05d8", SYSFS{idProduct}=="4002", \
  GROUP:="scanner", MODE:="0660"
[注意]

注意

上面一行仅用于描述目的。扫描仪 udev 规则在安装 SANE-1.4.0 时会被放置到位。

服务器设备

在某些情况下,完全禁用 udev 并创建静态设备是有意义的。服务器就是这种情况的一个例子。服务器需要处理动态设备的能力吗?只有系统管理员才能回答这个问题,但在许多情况下答案是否定的。

如果不需要动态设备,则必须在系统上创建静态设备。在默认配置中,/etc/rc.d/rcS.d/S10udev 启动脚本会在 /dev 目录上挂载 tmpfs 分区。可以通过临时挂载根分区来克服此问题:

[警告]

警告

如果不仔细遵循以下说明,您的系统可能会无法启动。

mount --bind / /mnt
cp -a /dev/* /mnt/dev
rm /etc/rc.d/rcS.d/{S10udev,S50udev_retry}
umount /mnt

此时,系统将在下次重新启动时使用静态设备。使用 mknod 创建任何所需的其他设备。

如果您想恢复动态设备,请重新创建 /etc/rc.d/rcS.d/{S10udev,S50udev_retry} 符号链接,并再次重新启动。静态设备不需要删除(console 和 null 始终是必需的),因为它们被 tmpfs 分区覆盖。设备的磁盘占用可以忽略不计(每个条目约 20–30 字节)。

DVD 驱动器的设备

如果初始启动过程未正确设置 /dev/dvd 设备,可以通过对默认 udev 规则进行以下修改来安装它。以 root 用户身份运行:

sed '1d;/SYMLINK.*cdrom/ a\
KERNEL=="sr0", ENV{ID_CDROM_DVD}=="1", SYMLINK+="dvd", OPTIONS+="link_priority=-100"' \
/lib/udev/rules.d/60-cdrom_id.rules > /etc/udev/rules.d/60-cdrom_id.rules