PyUSB设备声称,detach_kernel_driver返回未找到实体(PyUSB device

2019-10-19 22:56发布

我试图做批量读取和使用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"

我相应的设备。

运行脚本直接作为根提出了一个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

什么我缺少获得访问该设备有什么想法?

Answer 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()


文章来源: PyUSB device claimed, detach_kernel_driver return Entity Not Found