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的博客-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也已经启动。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在RK3568上开机启动shell脚本的方法如下所示: 1. 首先,在系统init.rc文件中添加以下内容: ``` service myshell /system/bin/myshell.sh user root group root disabled on property:sys.boot_completed=1 start myshell ``` 这段代码会启动一个名为myshell的服务,并在系统启动完成后执行`/system/bin/myshell.sh`脚本。 2. 然后,创建一个名为myshell.te的文件,将其放置在`device/rockchip/common/sepolicy`目录下,并添加以下内容: ``` type myshell, domain; type myshell_exec, exec_type, file_type; init_daemon_domain(myshell) allow myshell init_tmpfs:file create_file_perms; allow myshell self:capability { dac_override net_admin net_raw setgid setuid }; allow myshell device:dir { open read }; allow myshell shell:lnk_file { read }; allow myshell rootfs:lnk_file { getattr }; allow myshell socket_device:sock_file { write }; allow myshell shell_exec:file { getattr read}; allow myshell fuse:dir { search write add_name getattr}; allow myshell fuse:file { create write open getattr}; allow myshell system_file:file { execute_no_trans}; ``` 这段代码是为了授权myshell脚本执行所需的功能和权限。 通过以上步骤,你可以在RK3568上实现开机启动shell脚本的需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Android系统10 RK3399 init进程启动(四十四) 实战Android开机启动脚本](https://blog.csdn.net/ldswfun/article/details/128279000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [RK3399 Android 添加开机启动shell脚本](https://blog.csdn.net/weixin_41720013/article/details/120034087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值