Я пишу программу захвата камеры, которая использует 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, и я не уверен, что нужно сделать, чтобы заставить его работать для обычных пользователей. Вот шаги, которые я пробовал до сих пор:
/etc/udev/rules.d
что-то вроде этого: PROGRAM = «/ home / [username] / git / camera / prog», MODE = «0660», GROUP = «camera»Я учусь отлаживать по ходу работы, поэтому, если вам нужны логи или что-то еще, чтобы увидеть, что не так, просто дайте мне знать.
Возможно, вам нужно установить / получить флаги устройства, используя функцию, такую как 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
флаги.
Других решений пока нет …