【发布时间】:2016-12-28 04:18:50
【问题描述】:
我目前正在使用 JNI/NDK 将 C++ 通信库从 Linux 移植到 Android。该设备是用于进行科学测量的 USB 检测器。它只是一个原始 HID,以“/dev/hidraw0”的形式出现
我需要为设备获取一个文件描述符 ('_fileHandle'),我正在通过以下方式进行:
_fileHandle = open(_devicePath.c_str(), O_RDONLY | O_NONBLOCK);
其中“_devicePath”是设备节点“/dev/hidraw0”。不幸的是,我遇到了 Android 问题(很可能是权限/SELinux),在我尝试执行 open(...) 命令后,我的 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。
标签: android c++ linux android-ndk selinux