ネイティブコールでは、私はopen("/dev/video4", O_RDWR)
を試していますが、errno EACCES 13 "permission denied"が表示されます。Android NDK open()デバイスのアクセス権が拒否されました
同じコードを*実行可能ファイルで実行すると、同じAndroidホスト上で、インストールされているアプリケーションのUIDと同じで、上で実行していますが、正常に動作します。 (Java_com_test_testOpen()
の代わりにmain()
のような小さな違いがあります)
私はchmod 666 /dev/video4
を試しましたが、まだまだEACCESが奇妙です。
スタンドアロンの実行可能ファイルとして呼び出されたときに、なぜ同じコードは、同じユーザーとして、同じホストに、ないJNI経由で呼び出されたときにEACCESSを与え、成功?
テストデバイスはルートデバイスでCyanogenmod 12.1(API 22)を実行しており、> API 21(5.0 Lollipop)をターゲティングしています。ご協力いただきありがとうございます。
これはSELinuxです - dmesgには以下のエントリがあります: 'avc:denied {read write} for 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