关于设备

尽管 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 时会被放置到位。

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