3

如果它是通过插入 USB 充电器启动的,我试图制作脚本以将平板电脑从充电模式重新启动到正常状态。Android init 语言非常简单,但实际上它是如何被解析的对我来说非常神秘。

所以我在 root 上实现了 my_script.sh。添加到系统文件 my_script.sh initrd/my_script.sh 0750 并重新打包 boot.img。验证一切都到位并且访问权限应该是正确的。

#!/system/bin/sh
/system/bin/reboot -c reboot now

然后我在 init.rc

service rebootit /system/bin/sh /my_script.sh
    class main
    user root
    oneshot

然后我在 init.rc 的“充电器上”下添加了以下内容

start rebootit

知道如何实现吗?

编辑 1. 尝试以下。

service rebootit /system/bin/reboot -c reboot now
    class main
    user root
    oneshot

这就是结果。

 [4.648753] init: cannot execve('/system/bin/reboot'): Permission denied
 [4.649167] type=1400 audit(85946.779:4): avc: denied { execute_no_trans } for pid=331 comm="init" path="/system/bin/reboot" dev="mmcblk0p21" ino=730 scontext=u:r:init:s0 tcontext=u:object_r:system_file:s0 tclass=file permissive=0

编辑 2。

好的。一些进展。echo b > /proc/sysrq-trigger 似乎重新启动,但现在我需要找到一些变量,我可以使用它来分隔启动到正常模式时运行的脚本。我尝试使用从另一个初始化文件中找到的这种脚本。只是修改它适合我的需要,但仍然没有运气。

#!/system/bin/sh
bootmode=`getprop ro.bootmode`
if [ "$bootmode" = "charger" ]; then # Reboot the tablet
echo b > /proc/sysrq-trigger
fi

编辑 3. 解决方案

现在我终于明白了。

在 init.rc 我添加了以下内容:

#Check if chargermode and start rebootit service.
on property:ro.bootmode=charger
    start rebootit   

在它添加以下内容之后:

#rebootit service which command reboot
service rebootit /su/bin/su /system/bin/reboot -c reboot now
    user root
    oneshot

您需要安装 SU 才能工作。

4

0 回答 0