尽管 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_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
规则来微调设备属性(例如组名和权限),匹配类似以下内容。供应商和产品可以通过搜索 /sys/devices 目录条目或在设备连接后使用 udevadm info 找到。有关详细信息,请参阅当前
udev 目录中 /usr/share/doc 的文档。
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="05d8", SYSFS{idProduct}=="4002", \
GROUP:="scanner", MODE:="0660"