5

我正在使用 USB4Java(低级版本),基本上是从这里的代码开始工作。我在 Ubuntu 中工作,我遇到了关于权限的问题,但能够通过从终端使用 gksu 运行 eclipse 来解决。

现在我遇到了一个新问题:当我到达代码中的要点时:

public static void claimDevice(DeviceHandle handle, int interfaceNum){
    int r = LibUsb.claimInterface(handle, interfaceNum);
    .
    .
    .

我收到一个异常,告诉我“资源很忙”:

USB error 6: Unable to claim interface: Resource busy

我以前使用过 Ubuntu(但从未用于开发,所以我对此很陌生)。如果这不是应该处理这个问题的地方,那么请告诉我在哪里可以得到答案。

具体来说,问题是,这是什么意思,我该如何解决?我的目标,在这种情况下,这是一个自定义 USB 设备,是创建一个低级的跨平台...基于 java...“驱动程序”(松散地使用该术语)。我现在正在使用 Ubuntu,因为终端 lsusb 命令提供了有关设备的大量信息。

4

2 回答 2

10

我能够(多亏了一些哄骗)找到了谷歌的答案:对于遇到此错误并且不想挖掘的其他任何人,在我正在使用的上下文中,我需要将接口与内核分离在我声称它之前,就像这样:

public static void claimDevice(DeviceHandle handle, int interfaceNum){
    int r = LibUsb.detachKernelDriver(handle, interfaceNum);
    if (r != LibUsb.SUCCESS && 
        r != LibUsb.ERROR_NOT_SUPPORTED && 
        r != LibUsb.ERROR_NOT_FOUND) throw new LibUsbException("Unable to detach kernel     driver", r);
    .
    .
    .

希望这对你也有帮助。

于 2014-05-20T18:59:59.493 回答
2

声明设备的更简单方法是使用usb4java 文档中所述的强制声明

    UsbConfiguration configuration = device.getActiveUsbConfiguration();
    UsbInterface iface = configuration.getUsbInterface((byte) 0);
    iface.claim(new UsbInterfacePolicy()
    {            
        @Override
        public boolean forceClaim(UsbInterface usbInterface)
        {
            return true;
        }
    });

    try
    {

        System.out.println("is active: " + iface.isActive());

    }
    finally        
    {
        iface.release();
    }
于 2016-09-05T11:35:44.370 回答