Невозможно запросить интерфейс: ресурс занят

Я работаю с USB4Java (низкоуровневая версия) и в основном работаю с этим кодом здесь. Я работаю в Ubuntu, и у меня возникла проблема с разрешениями, но я смог решить ее, запустив eclipse с помощью gksu с терминала.

Теперь у меня возникла новая проблема: когда я доберусь до сути кода здесь:

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 дает много информации о рассматриваемом устройстве.


person Will    schedule 20.05.2014    source источник
comment
Вы сделали базовое исследование Google, ища сообщение об ошибке (я получаю много обращений)?   -  person Jim Garrison    schedule 20.05.2014
comment
вот оно: groups.google.com/forum/#!topic/usb4java /bVgfpCgKDJ0 Спасибо.   -  person Will    schedule 20.05.2014
comment
Вместо того, чтобы помещать ответ в вопрос, переместите его в ответ (вы можете ответить на свой собственный вопрос), а затем примите его после необходимого периода ожидания. Это сделает его гораздо более ценным для будущих искателей, поскольку они смогут легко найти ответ и убедиться, что он был принят.   -  person Jim Garrison    schedule 20.05.2014
comment
еще раз спасибо. переход с винды на линукс меня немного измотал...   -  person Will    schedule 20.05.2014


Ответы (2)


Мне удалось (благодаря некоторым уговорам) найти ответ в Google: для всех, кто сталкивается с этой ошибкой и не хочет копаться, в контексте, с которым я работал, мне требовалось отсоединить интерфейс от ядра. прежде чем я мог заявить об этом, вот так:

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);
    .
    .
    .

Надеюсь, это поможет и вам.

person Will    schedule 20.05.2014

Проще всего заявить права на устройство с помощью принудительной заявки, как описано в документации 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();
    }
person Itai Agmon    schedule 05.09.2016