PyUSB设备已声明,detach_kernel_driver返回未找到实体



我正在尝试使用PyUSB从Ubuntu上的USB设备进行批量读取和写入。然而,我一直没能走到这一步。

import usb.core
import usb.util
dev = usb.core.find(idVendor=0xXXXX,idProduct=0xYYYY)
if dev is None:
    raise ValueError('Device not found.')
try:
    dev.detach_kernel_driver(0)
except:
    print "exception dev.detach_kernel_driver(0)"
    pass
dev.set_configuration()
print "all done"

这是我正在使用的简单脚本。我创建了/etc/udev/rules.d/40-basic-rules.rules其中包含

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device",SYSFS{idVendor}=="XXXX" , SYSFS{idProduct}=="YYYY", MODE="0666"

我合适的设备。

以root身份按原样运行脚本会引发usb.core.USBError: [Errno 16] Resource busy错误,因为dev.detach_kernel_driver(0)引发异常usb.core.USBError: [Errno 2] Entity not found

在dmesg中,我看到这些消息,

[  638.007886] usb 1-1: usbfs: interface 1 claimed by usb-storage while 'python' sets config #1
[  643.425802] usb 1-1: usbfs: interface 1 claimed by usb-storage while 'python' sets config #1
[  647.957932] usb 1-1: usbfs: interface 1 claimed by usb-storage while 'python' sets config #1

有什么想法吗?我缺少什么来访问这个设备?

与我的问题一样,您的问题是在set_configuration()之前需要将内核从每个接口分离。以下是我现在使用的连接到USB音频设备的代码(包括一些脚手架):

import usb.core
import usb.util
scarlet = usb.core.find(idVendor = 0x1235)  # Focusrite
if not scarlet: print"No Scarlet"
c = 1
for config in scarlet:
    print 'config', c
    print 'Interfaces', config.bNumInterfaces
    for i in range(config.bNumInterfaces):
        if scarlet.is_kernel_driver_active(i):
            scarlet.detach_kernel_driver(i)
        print i
    c+=1
scarlet.set_configuration()

相关内容

  • 没有找到相关文章

最新更新