9

I2C デバイスの 1 つのロード可能なモジュールとしてカーネル ドライバーを作成しました。(/sys/devices/i2c/i2c-0/0-0008/)ドライバーは、new_device ファイルによるインスタンス化を使用して、I2C 対応フォルダーの下にいくつかの sysfs ファイルを作成します(/sys/devices/i2c/i2c-0/new_device)

Lollipop は SELinux を強制したため、デバイスの sysfs ファイルにアクセスする必要があるアプリケーションのルールを作成する必要があります。ほとんどの場合、これらはシステム アプリケーションです (Android SELinux の platform_app の定義に分類されます)。問題は、どのアプリケーション ドメインのアプリケーションも sysfs ファイルへの書き込みを許可されていないことです。

neverallow { appdomain -bluetooth -nfc }
    sysfs:dir_file_class_set write;

そこで、自分のデバイス専用のファイル コンテキストを作成することにしました。

file_context:

/sys/devices/i2c-0/0-0008(/.*)?                     u:object_r:sysfs_mydeviceic:s0

結果は興味深いものです。名前や uevent などのデフォルトのドライバー ファイルとフォルダーは適切なコンテキストを取得しますが、I2C ドライバーの sysfs 部分によって作成されたファイルは取得しません。

root@android:/sys/devices/i2c-0/0-0008 # ls -Z
--w--w--w- root     root              u:object_r:sysfs:s0 data
lrwxrwxrwx root     root              u:object_r:sysfs_mydeviceic:s0 driver -> ../../../bus/i2c/drivers/mydevice
-rw-rw-rw- root     root              u:object_r:sysfs:s0 locked
-r--r--r-- root     root              u:object_r:sysfs_mydeviceic:s0 modalias
-r--r--r-- root     root              u:object_r:sysfs_mydeviceic:s0 name
drwxr-xr-x root     root              u:object_r:sysfs_mydeviceic:s0 power
-rw-rw-rw- root     root              u:object_r:sysfs:s0 protection
-rw-rw-rw- root     root              u:object_r:sysfs:s0 state
lrwxrwxrwx root     root              u:object_r:sysfs_mydeviceic:s0 subsystem -> ../../../bus/i2c
-rw-r--r-- root     root              u:object_r:sysfs_mydeviceic:s0 uevent

この問題を解決する方法を教えてください。残りのファイルについて sysfs コンテキストを sysfs_mydeviceic に変換したい場合は、どうすればよいですか? または、アプリケーションによる sysfs ファイルへの書き込みを有効にする他の方法はありますか?

4

1 に答える 1