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



我正在尝试运行一个脚本,该脚本在设备完成启动时执行。这个特定的设备不支持从init.d目录运行脚本,这就是我使用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/

由于某种原因,我的脚本似乎没有运行,因为我看不到任何正在编写的文本来测试.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成员根据建议添加,尽管不确定是否有必要。

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

BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive

并重建/刷新更新的启动映像。

这篇文章是我找到添加 seclabel 属性的建议的地方。它还提供了有关我遇到的 SELinux 问题的更多有用信息:初始化警告:Service myservice 需要定义一个 SELinux 域。请修复

最新更新