2011-06-15 218 views
8

我正在为使用libusb的USB设备编写设备驱动程序。当我尝试声明该设备时,出现错误代码LIBUSB_ERROR_BUSY(-6)。根据文件,这意味着该设备已被要求(link)。libusb接口已经声明

如何找出哪个驱动程序/程序声明了该设备,更重要的是,我如何才能在声明该设备后声明该设备。

代码片段:

r = libusb_claim_interface(handle[0], 0); 
if (r < 0) { 
    fprintf(stderr, "libusb_claim_interface error %d\n", r); 
    goto out_release; 
} 
printf("claimed interface\n"); 

输出:

libusb_claim_interface error -6 
+0

我发现这篇文章寻找“_如何找出哪个驱动程序/程序声称device_”,所以我想链接这个问题:[有没有办法找出什么是使用Linux内核模块? ](http://stackoverflow.com/questions/448999/is-there-a-way-to-figure-out-what-is-using-a-linux-kernel-module),我认为这是相关的,因为它说,不可能看到哪个程序要求驱动程序/模块。 – sdaau 2013-03-18 19:59:19

回答

0

你叫libusb_set_configuration()libusb_claim_interface()过吗?

即使在描述符中只有一个配置,也必须调用它。

+0

我确实尝试过,但得到了完全相同的错误(-6)。在终端的'usb-devices'上看到'usb-storage'作为设备的驱动程序。出于某种原因,该设备正在分配一个驱动程序,我无法防止这种情况发生。我试过使用udev规则。 – jairo 2011-06-20 14:15:32

10

您是否在libusb_claim_interface()之前致电libusb_detach_kernel_driver()?这可能是必要的。

1

该问题很可能是由另一个Linux驱动程序声明的接口。请致电libusb_detach_kernel_driver()并指定接口号码,然后您应该能够连接它。