В настоящее время я переношу библиотеку связи C++ с Linux на Android с JNI/NDK. Устройство представляет собой детектор USB для проведения научных измерений. Это просто сырье HID, который появляется как «/ DEV/hidraw0»Как открыть узел устройства (/ dev/hidraw0) в приложении Android (через C++)?
мне нужно, чтобы получить дескриптор файла («_fileHandle») к устройству, которое я делаю через:
_fileHandle = open(_devicePath.c_str(), O_RDONLY | O_NONBLOCK);
где ' _devicePath 'является узлом устройства "/ dev/hidraw0". К сожалению, я бегу в проблему с Android (Permissions/SELinux, скорее всего), и я получаю следующее сообщение об ошибке в моем LogCat сразу после я пытаюсь выполнить команду Open (...):
type=1400 audit(0.0:41): avc: denied { read } for name="hidraw0" dev="tmpfs" ino=229381 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:device:s0 tclass=chr_file permissive=0
«ls -l» of «/ dev/hidraw0»:
crw------- 1 root root 229
Как открыть устройство?
Я пробовал только chmod разрешения на узел, и изменения не вставляются (Android сразу же их возвращает).
Спасибо!
ПРИМЕЧАНИЕ 1: Даже если вам удастся изменить разрешения с помощью chmod, SELinux блокировал вас. ПРИМЕЧАНИЕ 2: Если у вас есть «root», вы можете отключить SELinux с «setenforce 0». – y30
Аналогичный вопрос: http://stackoverflow.com/questions/37486349/android-ndk-open-device-permission-denied/37646688 – y30