我正在使用USB4Java(低级版本),我基本上使用此代码here。 我在Ubuntu工作,我遇到了关于权限的问题但是能够通过终端使用gksu运行eclipse来解决。
现在我遇到了一个新问题: 当我在这里得到代码中的要点时:
public static void claimDevice(DeviceHandle handle, int interfaceNum){
int r = LibUsb.claimInterface(handle, interfaceNum);
.
.
.
我得到一个例外,告诉我'#34;资源忙碌":
USB error 6: Unable to claim interface: Resource busy
之前我曾经使用过Ubuntu(但从未进行过开发,所以我对此非常陌生)。 如果这不是应该处理这个问题的,那么请告诉我在哪里接受它以便我得到答案。
具体来说,问题是,这是什么意思,我该如何解决? 我的目标,在这种情况下,这是一个自定义的USB设备,是创建一个低级别的跨平台...基于java ..."驱动程序" (松散地使用该术语)。我现在正在使用Ubuntu,因为终端lsusb命令在相关设备上提供了大量信息。
答案 0 :(得分:6)
我能够(感谢一些哄骗)找到谷歌的答案:对于遇到此错误并且不想挖掘的其他人,在我工作的环境中我需要分离界面在我声明它之前从内核开始,就像这样:
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);
.
.
.
希望这对你也有帮助。
答案 1 :(得分:0)
声称设备的一种更简单的方法是使用usb4java documentation
中所述的强制声明 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();
}