0
点赞
收藏
分享

微信扫一扫

Android系统10 RK3399 init进程启动(四十六) init.rc实战之控制自定义开机脚本的启动


 配套系列教学视频链接:

      ​​安卓系列教程之ROM系统开发-百问100ask​​

说明

系统:Android10.0

设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)

前言

默认自定义的脚本,可以在rc文件中指定class core, 或者class main,来让系统开机就自动执行,当然也可以根据自己的需求,让脚本或者可执行程序服务在指定的时候进行启动。

一, 修改rc文件,定义启动时间

本次实战是基于之前两个文章: 

​​Android系统10 RK3399 init进程启动(四十四) 实战Android开机自启动脚本_旗浩QH的博客​​​​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也已经启动。

举报

相关推荐

0 条评论