В обычном вызове я пытаюсь использовать open("/dev/video4", O_RDWR)
, но я получаю errno EACCES 13 «permission denied».Android NDK open() разрешено разрешение на использование устройства
Если я запускаю тот же код * в исполняемом файле, на том же хосте Android, что и тот же UID установленного приложения, над которым я работаю выше, он работает нормально. (* незначительные отличия, такие как main()
вместо Java_com_test_testOpen()
)
Я пробовал chmod 666 /dev/video4
и все еще получаю EACCES, что особенно странно.
Почему же код на же хосте, как же пользователя, дайте EACCESS при вызове через JNI, и успех при вызове в качестве автономного исполняемого файла?
Испытательное устройство внедрено и работает Cyanogenmod 12.1 (API 22), и я нацеливаюсь на> API 21 (5.0 Lollipop) на корневые устройства. Спасибо за вашу помощь.
Это SELinux - dmesg имеет такие записи, как: 'avc: denied {read write} для pid = 2495 comm =" est.v4l2test "name =" video4 "dev =" tmpfs "ino = 15110 scontext = u: r: untrusted_app : s0 tcontext = u: object_r: video_device: s0 tclass = chr_file'. Я отправлю ответ, как только я его отсортирую. На данный момент 'echo 0>/sys/fs/selinux/enforce' делает трюк! – jkoreska