libusb не может открыть USB-устройство, разрешение isse. NetBeans / Ubuntu

Я пишу приложение на C / C ++ в NetBeans на основе libusb-1.0 в Ubuntu 12.04.
Я могу получить основную информацию от устройства USB (например, описание интерфейса), но я не могу открыть устройство.
Функция libusb_open выдает мне ошибку:

libusb:error [op_open] libusb couldn't open USB device /dev/bus/usb/002/003: Permission denied.
libusb:error [op_open] libusb requires write access to USB device nodes.

Я понимаю, что мне нужно изменить разрешения, но я не знаю как (я очень простой пользователь Linux). Спасибо!

5

Решение

Ну, вы можете запустить свое приложение в режиме пользователя root и избавиться с разрешения
вопрос. Однако вы должны знать о последствиях запуска программы в
пользователь root и не должен делать, пока вы полностью не понимаете разрешение пользователя / группы
в системе на основе UNIX. Однако, если это ваша тестовая машина, я думаю, что вы можете сделать
следующее (для имени программы ./a.out):

  1. Откройте терминал
  2. Перейдите в каталог, где находится исполняемый файл вашей программы (проверьте, что ваш netbeans создает проект, и наберите cd «completepath).
  3. sudo ./a.out
  4. Теперь командная строка попросит ввести пароль root

Теперь вы сможете успешно запустить программу.

Однако, если вы хотите предоставить / изменить разрешение на чтение / запись / выполнение для конкретного пользователя, вам следует попытаться понять CHMOD команда. Вам придется изменить разрешение на каталог (/ dev / bus / usb / 002 /) и любой конкретный файл, находящийся в этом каталоге. Надеюсь, эта информация будет полезна.

3

Другие решения

Я думаю, что лучший способ сделать это — создать файл правил udev для ваших устройств. Просто создайте текстовые имена файлов, например myVendor.rules и поместите в него следующий текст (где 1234 Ваш идентификатор продавца:

SUBSYSTEM=="usb", ATTRS{idVendor}=="1234", MODE="0666"SUBSYSTEM=="usb_device", ATTRS{idVendor}=="1234", MODE="0666"

Поместите этот файл Udev в свой /etc/udev/rules.d/ каталог. Этот файл udev предоставит доступ на чтение и запись ВСЕМ пользователям, в том числе непривилегированным пользователям, для ВСЕХ USB-устройств с совпадающим идентификатором поставщика. Это означает, что ваше устройство доступно для пользователей без полномочий root даже без изменения исполняемого файла или запуска его с помощью sudo.

Этот пример udev специфичен для idVendor, но вы можете ограничить его VID и PID, чтобы быть более строгими. Проверьте эта статья для написания удев правила для получения дополнительной информации.

18

Я думаю, что это может быть временным решением проблемы, в то время как Решение Престона будет работать последовательно.

1. Проверьте, какой порт USB назначен для вашего устройства

Вы можете выяснить, какой USB-порт назначен вашему устройству, вызвав ls команда два раза (сначала с устройством отсоединены а второй с устройством связано).

$ ls -l /dev/bus/usb/00*
/dev/bus/usb/001:
total 0
crw-rw-r-- 1 root root 189, 0  1월 10 12:08 001
crw-rw-r-- 1 root root 189, 1  1월 10 12:08 002

/dev/bus/usb/002:
total 0
crw-rw-r-- 1 root root 189, 128  1월 10 12:08 001
crw-rw-r-- 1 root root 189, 129  1월 10 12:08 002

/dev/bus/usb/003:
total 0
crw-rw-r-- 1 root root 189, 256  1월 10 12:08 001
crw-rw-r-- 1 root root 189, 257  1월 10 12:08 002
crw-rw-r-- 1 root root 189, 258  1월 10 12:08 003
crw-rw-r-- 1 root root 189, 259  1월 10 12:08 004
crw-rw-r-- 1 root root 189, 260  1월 10 12:08 005
crw-rw-r-- 1 root root 189, 263  1월 10 15:42 008 <-- this is your device

Скажем / DEV / автобус / USB / 003/008 это ваше устройство.

2. Предоставление разрешения на запись для всех (других)

По результатам ls -l команда, пользователь root (группа) имеет разрешение на чтение / запись на 003/008 port в то время как другой пользователь имеет только разрешение на чтение.

crw-rw-r-- 1 root root 189, 263  1월 10 15:42 008

Вы можете разрешить каждый пользователь записать на конкретное устройство, используя chmod команда. При использовании chmod команда вам понадобится sudo разрешение.

$ sudo chmod o+w /dev/bus/usb/003/008

или же

$ sudo chmod a+w /dev/bus/usb/003/008

Теперь, если вы проверите разрешение USB, вы должны увидеть этот вывод

$ ls -l /dev/bus/usb/003/008
crw-rw-rw- 1 root root 189, 263  1월 10 15:42 /dev/bus/usb/003/008

3. Каждый раз, когда вы подключаете его или выключаете систему, повторяйте шаг 1,2

Если вы отключите устройство от порта USB или выключите систему, то, что вы сделали для своего порта USB, будет сброшено.

Вы должны повторить шаг 1,2 снова.

Вот почему я говорю, что мое решение является временным (нестабильным).

Дальнейшие чтения

Я считаю, что эти две статьи блога будут полезны для вашего понимания.

5

После добавления правила в /etc/udev/rules.d/
что-то вроде:

SUBSYSTEM=="usb", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="1234", MODE="0666", OWNER="YOU_USER_ID"

не забудьте перезагрузить правила:

$ sudo udevadm control --reload-rules
1
По вопросам рекламы [email protected]