Android 初始化服务错误无效关键字 'u:object_r:system_file:s0
Android init service error invalid keyword 'u:object_r:system_file:s0
我想 运行 在几台平板电脑 (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 但是放回去时失败了(其中两个变砖了)。更不用说要扎根它们我必须直接联系制造商...
一些提示会对我有所帮助!谢谢
您的 .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
以验证您的服务是否已正确标记。)
我想 运行 在几台平板电脑 (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 但是放回去时失败了(其中两个变砖了)。更不用说要扎根它们我必须直接联系制造商...
一些提示会对我有所帮助!谢谢
您的 .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
以验证您的服务是否已正确标记。)