2016-12-28 12 views
2

В настоящее время я переношу библиотеку связи 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

ПРИМЕЧАНИЕ 1: Даже если вам удастся изменить разрешения с помощью chmod, SELinux блокировал вас. ПРИМЕЧАНИЕ 2: Если у вас есть «root», вы можете отключить SELinux с «setenforce 0». – y30

+0

Аналогичный вопрос: http://stackoverflow.com/questions/37486349/android-ndk-open-device-permission-denied/37646688 – y30

ответ

0

@ y30 был верным.

Использование корневых команд из моего приложения, я получил его работу, установив SELinux в режим «Permissive» с помощью команды «setenforce 0», а затем я могу отправить команду «chmod 666/dev/hidraw0» и права доступа - я могу успешно связаться с устройством из своего приложения.

Это все еще немного нестабильно, но иногда я нахожу, что разрешения не могут быть установлены из моего приложения, хотя я не получаю никаких ошибок после запуска команд при запуске моего приложения, и у меня есть перейти на терминал, чтобы вручную выполнить команды с правами root, а затем вернуться к моему приложению.

Спасибо за помощь!