配套系列教学视频链接:
说明
系统:Android10.0
设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)
前言
默认自定义的脚本,可以在rc文件中指定class core, 或者class main,来让系统开机就自动执行,当然也可以根据自己的需求,让脚本或者可执行程序服务在指定的时候进行启动。
一, 修改rc文件,定义启动时间
本次实战是基于之前两个文章:
Android系统10 RK3399 init进程启动(四十四) 实战Android开机自启动脚本_旗浩QH的博客-CSDN博客Android系统10 RK3399 init进程启动(四十五) 实战Init.rc脚本中之日志永久化保存_旗浩QH的博客-CSDN博客
本次实战可以解决两个问题:
1,如何指定myboot.sh在特定时候启动
2,如何让logcatd服务在指定的条件下自动启动
vim device/rockchip/qh100_rk3399/test_se/scripts/myboot.rc的重新配置如下:
on property:vendor.myboot.control=enable
start mybootscript
service mybootscript /vendor/bin/myboot.sh
class late_start
disabled
user root
group root system
oneshot
重启系统后,mybootscript是不会启动的, 必须在某个时刻执行setprop vendor.myboot.control enable, 此时我们还希望启动了mybootscript的同时,也将logcatd也启动,可以修改: device/rockchip/qh100_rk3399/test_se/scripts/myboot.sh:
#!/vendor/bin/sh
#for fifo
/system/bin/mkfifo /dev/testfifo
/system/bin/chmod 777 /dev/testfifo
#for screen timemout
log -t QHDebug "QH ready to settings screen_off_timeout"
/system/bin/cmd settings put system screen_off_timeout 2147483647
while [ true ]
do
bootComplete=$(getprop dev.bootcomplete)
if [ $bootComplete = 1 ] ; then
processid=$(/system/bin/ps -elf | grep installd | grep -v grep | /system/bin/awk '{print $2}')
log -t QHDebug "get installd process id = ${processid}"
setprop vendor.test.installd.pid ${processid}
log -t QHDebug "ready to start logcatd"
setprop persist.logd.logpersistd.size 20
setprop persist.logd.logpersistd.buffer main,system,crash,radio,kernel
setprop logd.logpersistd logcatd
setprop logd.logpersistd.enable true
break;
else
sleep 3
fi
Done
重新编译模块,或者直接将rc和sh文件更新到开发板:
> adb -s QUMJHIRADP root
> adb -s QUMJHIRADP remount
remount succeeded
> adb -s QUMJHIRADP push .\myboot.sh /vendor/bin/
.\myboot.sh: 1 file pushed, 0 skipped. 4.6 MB/s (959 bytes in 0.000s)
> adb -s QUMJHIRADP push .\myboot.rc /vendor/etc/init/
.\myboot.rc: 1 file pushed, 0 skipped. 1.0 MB/s (189 bytes in 0.000s)
重启开发板子:
qh100_rk3399:/ $ getprop | grep my
[init.svc.mynativeservice]: [running]
[ro.boottime.mynativeservice]: [4354383835]
此时只有我们之前的C++服务
qh100_rk3399:/ $ setprop vendor.myboot.control enable #设置触发
qh100_rk3399:/ $ getprop | grep my
[init.svc.mybootscript]: [stopped] #执行完毕
[init.svc.mynativeservice]: [running]
[ro.boottime.mybootscript]: [161088125201]
[ro.boottime.mynativeservice]: [4354383835]
[vendor.myboot.control]: [enable]
qh100_rk3399:/ $ ps -elf | grep logcatd #logcatd也相应的被启动了
logd 1997 1 3 14:58:40 ? 00:00:00 logcatd -L -b main,system,crash,radio,kernel -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 1024 -n 20 --id=QD4A.200805.003
shell 2019 1920 3 14:58:57 pts/0 00:00:00 grep logcatd
以上日志可以看到,默认开机之后是没有mybootscript,只有设置了
setprop vendor.myboot.control enable 之后才能看到服务器启动了,说明是正确的, 并且logcatd也已经启动。