我在 Ubuntu 14.04 LTS 上使用 linux-gpib 软件包和 Keithley 的 KUSB-488A(gpib-usb 转换器)。它已正确安装,我可以使用ibtest
实用程序成功控制我的设备。但在此之前,每次我断开并重新连接设备时,我都需要运行gpib_config --minor 0
以启动驱动程序。
我希望它在每次建立连接时自动运行,而无需明确运行。 因此,udev
我想到了一条规则并写下了以下内容:
KERNEL=="gpib[0-9]*", ENV{DEVPATH}=="/devices/virtual/gpib_common/gpib0", RUN+="/usr/sbin/gpib_config --minor 0"
根据我从以下来源获得的信息:
udevadm info /dev/gpib0
P: /devices/virtual/gpib_common/gpib0
N: gpib0
E: DEVNAME=/dev/gpib0
E: DEVPATH=/devices/virtual/gpib_common/gpib0
E: MAJOR=160
E: MINOR=0
E: SUBSYSTEM=gpib_common
但当我重新启动规则时,这并没有帮助我udev
。据我观察,如果我重新启动 PC 本身,那么在第一次连接时,我可以ibtest
在不明确执行 的情况下运行gpib_config
。
我的不足之处还请帮助我吗?
答案1
我相信您/dev/gpib0
在重启后第一次连接时,下次重新连接就会打开/dev/gpib1
,并且每次重新连接时它都会像 USB 存储器一样递增。
在您第一次连接时,您获得:
E: DEVNAME=/dev/gpib0
E: DEVPATH=/devices/virtual/gpib_common/gpib0
对于第二个,我期望:
E: DEVNAME=/dev/gpib1
E: DEVPATH=/devices/virtual/gpib_common/gpib1
因此该规则永远不会在任何重新连接时运行,就像ENV{DEVPATH}
在 处固定的规则一样0
。另一点是,在您的情况下DEVNAME
&DEVPATH
非常相关(如果我不能说:它们是相同的),因此ENV{DEVPATH}
不会向规则添加任何内容。尝试:ls -l /dev/gpib*
,您应该找到一个符号链接:
/dev/gpibX -> /sys/devices/virtual/gpib_common/gpibX
所以保持规则简单:
KERNEL=="gpib[0-9]*", RUN+="/usr/sbin/gpib_config --minor 0"
顺便说一句,此规则运行多次,至少运行两次(2):设备连接时和设备断开时。我不熟悉硬件,如果您需要它,则仅在设备连接时才使用该命令,请将其添加ACTION
到规则中:
ACTION=="add", KERNEL=="gpib[0-9]*", RUN+="/usr/sbin/gpib_config --minor 0"