2014-12-01 4 views
5

내 I2C 장치 중 하나에 대해로드 가능한 모듈로 커널 드라이버를 만들었습니다. 드라이버는 I2C 해당 폴더 (/sys/devices/i2c/i2c-0/0-0008/) 아래에 new_device 파일 (/sys/devices/i2c/i2c-0/new_device)을 통해 인스턴스를 사용하여 sysfs 파일을 거의 생성하지 않습니다.안드로이드에서 sysfs의 i2c 파일에 대한 SELinux 규칙

Lollipop이 적용된 SELinux이므로 디바이스의 sysfs 파일에 대한 액세스가 필요한 응용 프로그램에 대한 규칙을 만들어야합니다. 주로 시스템 응용 프로그램입니다 (Android SELinux의 platform_app 정의에 해당합니다).

file_context: 

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

결과는 흥미 롭다 : 그래서 내 장치 전용 파일 컨텍스트를 만들기로 결정

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

: 문제는 응용 프로그램 도메인의 응용 프로그램 sysfs를 파일에 기록 할 수 없습니다 것입니다 기본 드라이버 어떻게 도움을 내가 찾고 있어요

[email protected]:/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 

: 파일 등의 이름과 uevent 같은 폴더는 I2C 드라이버의 sysfs를 부분에 의해 생성 된 파일을 적절한 컨텍스트를 얻을 수 있지만 이 문제를 계속 진행하십시오. 나머지 파일에 대해 sysfs 컨텍스트를 sysfs_mydeviceic으로 변환하고 싶다면이 작업을 수행하는 방법은 무엇입니까? 아니면 응용 프로그램에서 sysfs 파일에 쓸 수있는 다른 방법이 있습니까?

+0

나는 또한 해결책을 찾고 있는데, 해결책을 찾았습니까? – david

답변

0

일부 드라이버를 Android 5로 이식 할 때 동일한 문제가 발생했습니다. 모든 sysfs 파일이 올바른 selinux 컨텍스트에 들어있는 것은 아닙니다. 이것은 new_device을 통해 동적으로 인스턴스화 된 장치에 대해서만 발생하는 것으로 보입니다.

나를위한 해결책은 restorecon(8)을 사용하여 selinux가 파일 컨텍스트를 복원하도록 트리거하는 것이 었습니다. 당신이 당신의 장치를 초기화 할 때 사용하는 스크립트에서 다음 명령을 실행

restorecon -r /sys/devices/i2c-2/ 

-r 플래그는 재귀 적으로 일을 restorecon을 알려줍니다. 원하는 경우 모든 파일을 개별적으로 나열 할 수도 있습니다.

restorecon_recursive /sys/devices/i2c-2/ 

는 다시, 단지 하나의 파일을 복원합니다 restorecon 명령이 있습니다 : 당신이 그쪽으로 안드로이드 초기화 스크립트 (예 : /init.rc 등)를 사용하는 경우

이 가능한 다른 명령이 있습니다. 자세한 내용은 SEAndroid documentation을 참조하십시오.