Android初始化服务错误无效关键字'u:object_r:system_file:s0

问题描述 投票:1回答:1

我想在几台平板电脑(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

我的.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_file: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

android shell service init selinux
1个回答
1
投票

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

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

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

  • 确定要在其中添加策略的文件夹。这在某种程度上是特定于您的设置的,所以我不能给您确切的答案。检查源代码中的.te文件。 Android的核心策略位于system/sepolicy/中,但是如果您的设置在devices/vendor/中的某些位置具有特殊的SE策略,则这些位置将更适合您的自定义(因为这样可以使您更轻松地更新到新的您的自定义设置尽可能隔离的Android版本)。
  • 在该文件夹中,创建一个新的策略文件,例如digitalads.te。添加以下规则:
type digitalads_exec, system_file_type, exec_type, file_type;
type digitalads domain;
init_daemon_domain(digitalads)
  • 在同一文件夹中,应该有一个文件file_contexts:添加一行,如
/system/bin/digitalads u:object_r:digitalads_exec:s0
  • ((使用此更改启动时,ls -Z /system/bin/digitalads应该显示此标签。)

  • 对于.rc文件中的seclabel,将system_file替换为digitalads

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

© www.soinside.com 2019 - 2024. All rights reserved.