2016-05-27 24 views
2

ネイティブコールでは、私は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)をターゲティングしています。ご協力いただきありがとうございます。

+0

これは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

答えて

0

私はCyanogenmod 12.1私は、以下のハックを使用して、私のアプリで/dev/video*のアクセス権を取得することができた他のマイナーなハックと(API 22)を構築しないんだので:もはや標準的なLinuxの権限については

  1. android.permission.CAMERAを彼らがsystem:cameraによって所有されていても、/dev/video*へのアクセスを許可しているようです。代わりにdevice/samsung/klte-common/rootdir/etc/ueventd.qcom.rcを編集し、/dev/video*行を0666に変更しました。
  2. SE Linuxのパーミッションについては、allow untrusted_app video_device:chr_file rw_file_perms;external/sepolicy/untrusted_app.teに追加しました。

イメージを再構築してインストールした後、私のJNI libは/dev/video*にアクセスでき、クライアントは満足しています!

1

Android Javaアプリケーションからコードを実行しているときにエラーが発生するため、権限が不足していると思われます。それは私が間違っていないよ場合は、アクセスしようとしているカメラですので、あなたが追加した場合:

<uses-permission android:name="android.permission.CAMERA" /> 

をあなたのAndroidManifest.xmlに、あなたのアプリケーションは正常に実行する必要があります。

+0

ありがとうございますが、私はそれを持っています!私の理解では、この許可はあなたのアプリのUIDをカメラのGIDに追加するが、chmod 666はこれを無視する。また、セキュリティ上の理由(これは現在コミットまたは参照を見つけることができない)のためにAPI 22+で削除されたことが判明しました。 – jkoreska

関連する問題