无法在init.rc中启动时执行守护程序

时间:2016-03-29 03:46:35

标签: android c linux kernel selinux

我已经创建了一个守护进程,但无法在我在Marshmallow上运行的Nexus 5中运行它。

以下是在init.rc中编辑的代码

on init
    chmod 777 /sbin/check_usb
    chown root root /sbin/check_usb

service disableadb /sbin/check_usb
    class main 
    seclabel u:r:disableadb:s0

以下是我在init.usb.rc中编辑的条目,这样当检测到adb连接时,我的守护进程将被执行

on property:sys.usb.config=accessory,adb && property:sys.usb.configfs=0
start disableadb

我在/ sbin / system下插入了check_usb程序,并授予chmod 777访问权限。

但是我注意到在dmesg中grep disableadb输出,我的守护进程无法执行错误,如下所示:

init : cannot setexeccon ('u:r:disableadb:s0') Invalid argument

1 个答案:

答案 0 :(得分:1)

此错误可能是由于sepolicy问题造成的。 您新添加的服务可能没有正确的sepolicy配置。

为此添加sepolicy规则。 创建以下文件。

创建目录return match && match.length

在里面,创建文件device/xxx/.../sepolicy/check_usb

file_contexts

创建文件:check_usb.te

/sbin/check_usb             u:object_r:disableadb:s0

在BoardConfig.mk中添加此目录

# check_usb service
type check_usb, domain;
type check_usb_exec, exec_type, file_type;

init_daemon_domain(check_usb)

allow init check_usb:process transition;