设置设备的 lirc 顺序

设置设备的 lirc 顺序

我有两个远程设备。一个是我想使用的 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。这使得配置应用程序变得更加困难。

我想要其中之一:

  1. 要将我的 mceusb 设备永久设置为 /dev/lirc0,或者,
  2. 通过禁用 lirc 处理设备来实现相同的目的saa716x。请注意,这是一个多功能设备模块,还可以处理电视流媒体的视频。
    黑名单saa716x不是一种选择。
  3. 启动后不知怎么的“把事情纠正过来”...我以前研究过这个问题,但我不知道如何找出模块 a/dev/lircX是什么,更不用说交换它们了。

我对任何事情都持开放态度。你应该能明白我在追求什么。

答案1

7.3.3.6. 设备命名顺序在重启后随机改变

这是因为,Udev 在设计上是并行处理 uevent 和加载模块,因此顺序不可预测。这个问题永远无法被“解决”。您不应依赖内核设备名称的稳定性。相反,应创建自己的规则,根据设备的某些稳定属性(例如序列号或 Udev 安装的各种 *_id 实用程序的输出)创建具有稳定名称的符号链接。有关示例,请参见第 7.4 节 “管理设备”和第 7.5 节 “常规网络配置”。

来源: Linux From Scratch:7.3. 设备和模块处理概述


  1. 检查目标节点及其父节点的属性

    udevadm info -a /dev/lirc1
    
  2. 检查目标节点的环境变量(可用于规则匹配的不同内容)

    udevadm info /dev/lirc1
    
  3. 创建新的 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无论如何,这都是遥不可及的。

  4. 重新加载规则

    sudo udevadm control -R
    
  5. 触发事件请求,重新插入 USB 设备或者您可能需要重新启动。

    sudo udevadm trigger
    
  6. 设置您的应用程序以使用/dev/lirc90

笔记:

  • 针对同一设备,有很多方法可以实现规则。因此,我可以为 USB 加密狗编写另一个规则:

    ACTION=="add", KERNEL=="lirc?", DRIVERS="mceusb", SYMLINK+="lirc90"
    
  • KERNELS,,,SUBSYSTEMS向上DRIVERS搜索ATTRSdevpath 以查找匹配项。请参阅man udev

相关内容