Ошибка сегментации в программе libusb 1.0 при запуске от имени пользователя, а не от sudo

Я пишу программу захвата камеры, которая использует libusb 1,0 и км. Это подключается к моему Atik 314L астрономическая камера и захватывает изображения для отображения на экране. Он прекрасно компилируется при компиляции как обычный или с правами суперпользователя и хорошо работает при выполнении от имени пользователя root, но генерирует ошибка сегментации когда бегут любым другим способом.

я использую Code :: Blocks, и стек вызовов показывает, что ошибка сегментации происходит при вызове usb_control_msg() функция:

#0 (usb_control_msg(dev=0x0, requesttype=64, request=160, value=58880, index=0 bytes=0x7fffffffe5df "\001 \346\377\377\377\177", size=1, timeout=500) (linux.c:152)

Я довольно новичок в программировании в среде Linux, и я не уверен, что нужно сделать, чтобы заставить его работать для обычных пользователей. Вот шаги, которые я пробовал до сих пор:

  1. Добавьте моего пользователя во все группы пользователей, чтобы узнать, не является ли это проблемой с правами доступа группы (черт возьми, я даже пытался добавить себя в «root», но ничего не сделал)
  2. Добавить правило в /etc/udev/rules.d что-то вроде этого: PROGRAM = «/ home / [username] / git / camera / prog», MODE = «0660», GROUP = «camera»
  3. Попробуйте изменить разрешения самой программы на 777. Это была последняя попытка, хотя я не ожидал, что это сработает.

Я учусь отлаживать по ходу работы, поэтому, если вам нужны логи или что-то еще, чтобы увидеть, что не так, просто дайте мне знать.

1

Решение

Возможно, вам нужно установить / получить флаги устройства, используя функцию, такую ​​как fnctl()и по вашему требованию вы можете установить режим доступа к файлу (O_RDONLY / O_WRONLY / O_RDWR) и флаги создания файлов (O_CREAT / O_EXCL / O_NOCTTY / O_TRUNC). Однако в Linux эта команда может изменить только O_APPEND, O_ASYNC, O_DIRECT, O_NOATIME а также O_NONBLOCK флаги.

1

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

Других решений пока нет …