Android初始化服务错误无效关键字';u:对象\r:系统\u文件:s0

Android初始化服务错误无效关键字';u:对象\r:系统\u文件:s0,android,shell,service,init,selinux,Android,Shell,Service,Init,Selinux,我想在一些平板电脑(VONINO NAVO p)上运行一项服务,它们将用作数字广告的相框。 我试图实现的是在启动时运行一些命令,我被卡住了。 我已经在system/etc/init中创建了digitalads.rc,它将执行/system/bin/digitalads.sh,我需要在其中运行一些命令,如: svc power stayon true settings put system screen_brightness 255 pm disable com.android.systemui

我想在一些平板电脑(VONINO NAVO p)上运行一项服务,它们将用作数字广告的相框。 我试图实现的是在启动时运行一些命令,我被卡住了。 我已经在system/etc/init中创建了digitalads.rc,它将执行/system/bin/digitalads.sh,我需要在其中运行一些命令,如:

svc power stayon true
settings put system screen_brightness 255
pm disable com.android.systemui
settings put system screen_off_timeout 999999999
settings put system accelerometer_rotation 0
settings put global airplane_mode_on 0
svc bluetooth disable
monkey -p my.app -c android.intent.category.LAUNCHER 1
and some other custom commands that they will update the contents of media files
my.rc文件:

tulip-f708:/ # cat /system/etc/init/digitalads.rc                                                                          
service digitalads /system/bin/digitalads.sh
    disabled
    user root
    group root
    u:object_r:system_file:s0

on property:sys.boot_completed=1
   start digitalads
dmesg输出

tulip-f708:/ # dmesg | grep digitalads                                                                                     
[    6.512868] init: /system/etc/init/digitalads.rc: 5: invalid keyword 'u:object_r:system_file:s0'
[    6.522694] init: (Parsing /system/etc/init/digitalads.rc took 0.01s.)
[   44.546434] init: Service digitalads does not have a SELinux domain defined.
SElinux输出

tulip-f708:/ # getenforce 
Enforcing
tulip-f708:/ # setenforce 0
tulip-f708:/ # getenforce                                                                                                  
Permissive
在u:object\r:system\u文件s0下运行的其他服务

tulip-f708:/ # ls -Z /system/bin/                                                                                          
u:object_r:system_file:s0           4d78d2ea-a631-70fb-aaa787c2b5773052.ta 
u:object_r:system_file:s0           a98befed-d679-ce4a-a3c827dcd51d21ed.ta 
u:object_r:system_file:s0           acpi                                   
u:object_r:system_file:s0           am                                     
u:object_r:system_file:s0           app_process                            
u:object_r:zygote_exec:s0           app_process32                          
u:object_r:zygote_exec:s0           app_process64                          
u:object_r:system_file:s0           applypatch                             
u:object_r:system_file:s0           appops                                 
u:object_r:system_file:s0           appwidget                              
u:object_r:system_file:s0           arping 
............................. 
我还试图解包boot.img来修改init.rc,但在放回它时失败了(用砖砌了其中两个)。更不用说要根除它们我必须直接联系制造商


一些提示会帮助我的!Thx

您的
.rc
文件似乎遗漏了
seclabel
关键字。您的服务声明应如下所示:

service digitalads /system/bin/digitalads.sh
    disabled
    user root
    group root
    seclabel u:object_r:system_file:s0

编辑您的SE Linux违规:消息说init无法启动标有system_文件的程序。这意味着您必须修改SE Linux规则。最好的方法是为您的服务添加一个新标签:

  • 标识要添加策略的文件夹。这是有点特定于您的设置,所以我不能给您一个明确的答案。检查源代码中的
    .te
    文件。Android的核心策略在
    系统/sepolicy/
    中,但是如果您的设置在
    设备/
    供应商/
    中的某个位置有特殊的SE策略,那么这些位置将更适合您的定制(因为当您的自定义设置尽可能独立时,您可以更轻松地更新到新的Android版本)
  • 在该文件夹中,创建一个新的策略文件,例如
    digitalads.te
    。添加以下规则:
  • 在同一文件夹中,应该有一个文件
    file\u contexts
    :添加一行,如
  • (使用此更改启动时,
    ls-Z/system/bin/digitalads
    应显示此标签。)

  • 对于
    .rc
    文件中的seclabel,请将
    system\u文件
    替换为
    digitalads

  • (检查
    dmesg
    输出和
    ps-Z
    以验证您的服务是否正确标记。)


[420.798959]初始化:无法执行('/system/bin/digitalads.sh'):权限被拒绝[420.808120]初始化:服务“digitalads”(pid 3383)退出,状态为127[420.818030]初始化:服务“digitalads”(pid 3383)杀死进程组[425.832436]初始化:启动服务“digitalads”…[425.840864]类型=1400审核(1262542213.780:80):avc:denied{transition}for pid=3384 comm=“init”path=“/system/bin/digitalads.sh”dev=“nandd”ino=2461 scontext=u:r:init:s0 tcontext=u:object\r:system\u file:s0 tclass=process permissive=0这基本上意味着init不允许使用此标签启动服务。我将扩展关于如何扩展规则的回答。
type digitalads_exec, system_file_type, exec_type, file_type;
type digitalads domain;
init_daemon_domain(digitalads)
/system/bin/digitalads u:object_r:digitalads_exec:s0