Android 运行 脚本在启动时使用 init.rc 不工作

Android run script at boot using init.rc not working

我正在尝试 运行 一个在设备完成启动时执行的脚本。此特定设备不支持来自 init.d 目录的 运行ning 脚本,这就是我使用 init.rc.

的原因

init.rc 文件已修改为包含以下代码

on property:sys.boot_completed=1
start initAsic

service initAsic /data/local/tmp/runn.sh
user root
group root
oneshot

引导映像已重建并刷入设备。可以通过查看位于 /

的 init.rc 文件来确认更改

目前我只使用一个简单的测试脚本 (testScript.sh),它发出以下命令

echo hi >> /data/local/tmp/test.txt

testScript.sh 和 text.txt 文件设置了 777 权限,并且都已使用 adb push 推送到设备。 他们目前的位置是/data/local/tmp/

出于某种原因,我的脚本似乎不是 运行ning,因为我看不到任何正在写入 test.txt.

的文本

我错过了什么吗? 会不会是 SELinux 的问题?

我的设备当前将 SElinux 设置为宽松。这是通过更改 BoardConfig.mk 文件并重建 boot.img.

来完成的

通过 运行 执行命令 dmesg | grep -C5 initAsic 我看到我收到了返回的错误代码

service initAsic does not have a SELinux domain defined

问题是我需要将行 seclabel u:r:init:s0 添加到我的初始化服务。完整的服务现在看起来像这样。

service initAsic2 /data/local/tmp/runn.sh
seclabel u:r:init:s0
user root
group root
oneshot
disabled

另一个 SO 成员根据建议添加了 disabled 关键字,但不确定是否有必要。

另请注意,必须将 SElinux 设置为 permissive 以允许该服务 运行 或者必须设置一个策略以允许该服务运行。有几种方法可以做到这一点。对我有用的方法涉及将以下行添加到我设备的 BoardConfig.Mk 文件中

BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive

并对更新后的启动映像执行 rebuild/flash。

这个 post 是我找到添加 seclabel 属性 的建议的地方。它还包含有关我遇到的 SELinux 问题的更多有用信息: