我有两个远程设备。一个是我想使用的 USB MCE 远程加密狗,另一个是卫星 PCI-E 卡上的内置设备,我既不使用也不想使用。
当设备启动时,lirc 会为这些设备分配一个/dev/lircX
设备(其中 X 是一个数字)。以这个dmesg
输出为例:
[...] rc rc0: lirc_dev: driver ir-lirc-codec (saa716x) registered at minor = 0
[...] rc rc1: lirc_dev: driver ir-lirc-codec (mceusb) registered at minor = 1
上面,我的 MCE 遥控器位于 下/dev/lirc1
。问题是下次我启动时,它将是/dev/lirc0
。这使得配置应用程序变得更加困难。
我想要其中之一:
- 要将我的 mceusb 设备永久设置为 /dev/lirc0,或者,
- 通过禁用 lirc 处理设备来实现相同的目的
saa716x
。请注意,这是一个多功能设备模块,还可以处理电视流媒体的视频。
黑名单saa716x
不是一种选择。 - 启动后不知怎么的“把事情纠正过来”...我以前研究过这个问题,但我不知道如何找出模块 a
/dev/lircX
是什么,更不用说交换它们了。
我对任何事情都持开放态度。你应该能明白我在追求什么。
答案1
7.3.3.6. 设备命名顺序在重启后随机改变
这是因为,Udev 在设计上是并行处理 uevent 和加载模块,因此顺序不可预测。这个问题永远无法被“解决”。您不应依赖内核设备名称的稳定性。相反,应创建自己的规则,根据设备的某些稳定属性(例如序列号或 Udev 安装的各种 *_id 实用程序的输出)创建具有稳定名称的符号链接。有关示例,请参见第 7.4 节 “管理设备”和第 7.5 节 “常规网络配置”。
来源: Linux From Scratch:7.3. 设备和模块处理概述
检查目标节点及其父节点的属性
udevadm info -a /dev/lirc1
检查目标节点的环境变量(可用于规则匹配的不同内容)
udevadm info /dev/lirc1
创建新的 UDEV 规则文件
sudo nano /etc/udev/rules.d/99-lirc-symlinks.rules
#2 or only setup link for usb device ACTION=="add", KERNEL=="lirc?", ATTRS{idVendor}=="1934", ATTRS{idProduct}=="5168", SYMLINK+="lirc90"
lirc90
无论如何,这都是遥不可及的。重新加载规则
sudo udevadm control -R
触发事件请求,重新插入 USB 设备或者您可能需要重新启动。
sudo udevadm trigger
设置您的应用程序以使用
/dev/lirc90
笔记:
针对同一设备,有很多方法可以实现规则。因此,我可以为 USB 加密狗编写另一个规则:
ACTION=="add", KERNEL=="lirc?", DRIVERS="mceusb", SYMLINK+="lirc90"
KERNELS
,,,SUBSYSTEMS
向上DRIVERS
搜索ATTRS
devpath 以查找匹配项。请参阅man udev
。