Je suis actuellement le portage d'une bibliothèque de communication C++ de Linux vers Android avec JNI/NDK. L'appareil est un détecteur USB pour effectuer des mesures scientifiques. Il est juste un HID brut qui vient comme «/dev/hidraw0 »Comment ouvrir le nœud de périphérique (/ dev/hidraw0) dans l'application Android (via C++)?
je dois obtenir un descripteur de fichier (« _fileHandle ») au dispositif, ce que je fais via:
_fileHandle = open(_devicePath.c_str(), O_RDONLY | O_NONBLOCK);
où ' _devicePath 'est le noeud de périphérique "/ dev/hidraw0". Malheureusement, je suis en cours d'exécution dans un problème avec Android (Permissions/SELinux, le plus probable) et je reçois l'erreur suivante dans mon logcat juste après que je tente d'exécuter la commande d'ouverture (...):
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
Le "ls -l" de "/ dev/hidraw0" est:
crw------- 1 root root 229
Comment puis-je ouvrir l'appareil?
J'ai essayé de juste chmod les permissions sur le noeud et les changements ne collent pas (Android les renverse immédiatement).
Merci!
NOTE1: Même si vous réussissez à modifier les autorisations avec chmod, le SELinux vous bloquait. NOTE2: Si vous avez "root" vous pouvez désactiver le SELinux avec "setenforce 0". – y30
Une question similaire: http://stackoverflow.com/questions/37486349/android-ndk-open-device-permission-denied/37646688 – y30