在启动时执行 udev 规则

在启动时执行 udev 规则

我有 National Instruments USB<->GPIB 桥接器。它是一个USB板,需要特殊的程序才能使用。我安装了 linux_gpib 软件包,它提供了两个内核模块:gpib_commonni_usb_gpib。此外,gpib_config在我可以与 GPIB 总线上的任何仪器通信之前,必须先执行该工具。诀窍在于,板子插入 USB 后需要大约 2 秒进行内部初始化,然后gpib_config命令才会生效。因此,我有以下99-gpib.rulesudev 规则可以完美完成工作:

SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="3923", ATTR{idProduct}=="709b", RUN+="/bin/sh -c '/usr/bin/sleep 2; /usr/sbin/gpib_config --minor 0'"

KERNEL=="gpib[0-9]*", MODE="0660", GROUP="gpib"

问题是只有当我在主机系统启动并运行时插入主板时它才起作用。当我插入加密狗后重新启动时,我可以看到两个内核模块均已加载,但该板无法使用,这意味着该gpib_config工具未执行。如果我手动运行它,它会完美运行。

由于重新启动的情况更加真实,然后在系统运行时插入它,我需要正确的方法让 udev 在启动时执行此操作。当然,我可以编写一些初始化脚本来检查主板是否已插入、内核模块是否已加载,并在加载过程中运行该工具,但我认为这是 udev 的工作,因为它需要处理硬件。有任何想法吗?

答案1

问题出在执行 RUN 内容的 udev 中相应模块加载,因此gpib_config无法配置板卡。解决方法是在系统引导时启动 udev 之前加载模块。我认为这不是一个真正的解决方案。

相关内容