我目前正在使用JNI/NDK將一個C++通信庫從Linux移植到Android。該設備是用於進行科學測量的USB檢測器。這只是一個原始HID它出來作爲「的/ dev/hidraw0」如何在Android應用程序(通過C++)中打開設備節點(/ dev/hidraw0)?
我需要一個文件描述符(「_fileHandle」)到設備,這我通過做:
_fileHandle = open(_devicePath.c_str(), O_RDONLY | O_NONBLOCK);
其中「 _devicePath'是設備節點「/ dev/hidraw0」。不幸的是,我運行到了Android(權限/ SELinux的,最有可能的)一個問題,我碰到下面的錯誤在我的logcat之後我嘗試執行打開(...)命令:
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
的「/ dev/hidraw0」的「ls -l」是:
crw------- 1 root root 229
我該如何讓設備打開?
我試圖只是chmod節點上的權限和變化不堅持(Android立即恢復它們)。
謝謝!
注1: 即使您成功通過chmod更改權限,SELinux也會阻止您。 注2: 如果你有「root」,你可以通過「setenforce 0」來禁用SELinux。 – y30
類似的問題:http://stackoverflow.com/questions/37486349/android-ndk-open-device-permission-denied/37646688 – y30