如果它是通过插入 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 才能工作。