我有一个 Thorlabs 的 PM100D 功率计设备。
我遇到的问题是,我想通过从中的节点文件写入和读取来与它进行通信/dev
。
我之前在 ubuntu 16.04 中尝试过这样做,因此我创建了一个适当的 udev 规则,使我成为所创建节点的所有者和组所有者。然而,这毫无意义,因为我永远无法在 中向所创建的节点写入任何内容/dev
。我应该说在 ubuntu 中,不知何故系统从未usbtmc0
为我创建 ,它只是在 中的某个地方创建了节点/dev/bus/usb/xxx/yyy
当我尝试在 Debian 中执行相同的写入和读取命令时,一切都运行正常。我现在明白了,原因是/dev/usbtmc0
当我从 Debian 插入设备时,我实际上正在写入,但在 ubuntu 中没有。在 ubuntu 中创建的节点,形式为/dev/bus/usb/xxx/yyy
:因此,当我在 Debian 中插入设备时,不知何故创建了/dev/usbtmc0
和/dev/bus/usb/xxx/yyy
。同样,如果我尝试与 usbtmc0 节点通信,一切都会顺利进行,但如果我尝试通过节点进行通信xxx/yyy
,写入就会出错(我从 python 收到“OSError:[Errno 22] 无效参数”)。在 ubuntu 和 debian 中插入和拔出时,我每次都检查模块是否usbtmc
已加载,并且每次都是在插入时加载的(我通过先移除模块然后插入设备来确保这一点,之后,我检查模块是否已重新加载)
所以我想我的问题是双重的:
1) 我如何更改 usbtmc 节点创建的默认行为?也就是说,具体在 Debian 中,节点是为 root 用户创建的,但我想让我的 python 脚本适用于计算机上的任何人。我似乎无法让 udev 帮助我,因为我似乎无法控制 usbtmc0 的创建。有什么想法吗?
2) 有没有办法强制 usbtmc 在 ubuntu 16.04 中创建节点?它不会自动执行此操作,但在 debian 9 中可以。此外,不知何故,在我的计算机上,dmesg 不会警告我有关创建 usbtmc0 节点的信息,而在另一台计算机上却会发出警告
[Mon Mar 12 16:26:55 2018] usb 3-1.6: new full-speed USB device number 15 using ehci-pci
[Mon Mar 12 16:27:00 2018] usb 3-1.6: New USB device found, idVendor=1313, idProduct=8078
[Mon Mar 12 16:27:00 2018] usb 3-1.6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[Mon Mar 12 16:27:00 2018] usb 3-1.6: Product: PM100D
[Mon Mar 12 16:27:00 2018] usb 3-1.6: Manufacturer: Thorlabs
[Mon Mar 12 16:27:00 2018] usb 3-1.6: SerialNumber: P0016534
非常感谢您的帮助。
编辑:事实上,我确实可以用 udev 规则影响节点,只需在文件usbtmc0
中添加这样一行即可/etc/udev/rules.d/10-local-rules
KERNEL=="usbtmc*", MODE="0666", GROUP="usbtmc"
答案1
评论:您还可以专门针对 PM100 功率计。
(/etc/udev/rules.d/usbtmc_thorlabs.rules)
# Thorlabs PM100USB/PM100D
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="1313", ATTRS{idProduct}=="8072", GROUP="usbtmc", MODE="0660"
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="1313", ATTRS{idProduct}=="8078", GROUP="usbtmc", MODE="0660"