地平线Horizon XJ3设置开机启动项

XJ3添加启动项
0728版本之后的init进程改为了android的init进程,与sysvinit的init添加启动有一些区别
android init的启动项都放到了/init.rc当中,init.rc详细的语法规则我们只做简单介绍,详细规则可参考https://www.jianshu.com/p/cb73a88b0ee

在/etc/init.d中增加启动脚本

例如start_horizon.sh,切记开头**#!/bin/sh**

#!/bin/sh
logFile='/userdata/start.log'
ltime=$(date "+%Y-%m-%d %H:%M:%S")
echo "${ltime} start wuxiangyun" >> "$logFile"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/userdata/app
cd /userdata/app
./start.sh &

在/init.rc中添加启动

service start_horizon /etc/init.d/start_horizon.sh
        class loadko_ready
        oneshot

添加了脚本没有正常启动,可查看以下几点原因

1、依赖项没有启动
2、启动脚本没有执行权限
3、启动脚本开头没有"#!/bin/sh"

1、android init的基本规则

android init的启动项都放到了/init.rc当中,init.rc详细的语法规则我们只做简单介绍,详细规则可参考https://www.jianshu.com/p/cb73a88b0eed
init.rc文件是以“块”(section)为单位服务的,,一个“块”(section)可以包含多行。“块”(section)分成两大类:一类称为"动作(action)",另一类称为
“服务(service)”。
动作(action):以关键字"on" 开头,表示一堆命令
服务(service):以关键字“service”开头,表示启动某个进程的方式和参数
动作的格式如下

on <trigger> ## 
 <command> ##
 <command1> ##

触发器(trigger)有几种格式:
1、最简单的一种是一个单纯的字符串。比如“on boot”。这种简单的格式可以使用命令"trigger"来触发。
2、还有一种常见的格式是"on property<属性>=<值>"。如果属性值在运行时设成了指定的值,则"块"(action)中的命令列表就会执行。
常见的如下:
on on early-init:在初始化早期阶段触发
on init:在初始化阶段触发
on late-init:在初始化晚期阶段触发
on boot/charger:当系统启动/充电时触发
on property:当属性值满足条件时触发
service的格式如下

service <name><pathname> [ <argument> ]*
 <option>
 <option>
<name>:表示此service的名称
<pathname>:此service所在路径。因为是可执行文件,所以一定有存储路径
<argument>:启动service所带的参数
<option>:对此service的约束选项

2、添加一个启动项

下面是/init.rc中的一个启动项

on property:loadko.ready=1
 class_start loadko_ready
service dispinit /etc/init.d/x3dispinit.sh
 class loadko_ready
 oneshot
 console

on表示是一个命令,这个命令的意思是当属性loadko.ready为1的时候,启动loadko_ready这个class
Horizon Robotics Confidential for 富思通
by 杨亮斌 20211118
service:表示这是一个服务
face_test:service的名称
etc/rc5.d/S90factest.sh:service的具体执行路径和参数
class popvol_ready:表示属于哪个classs
oneshot:表示只执行一次,如果需要确保能一直执行,删除即可
console:打印信息到console,不加的话上电时不会有打印信息,默认都没有加
而在/etc/init.d/load_ko.sh设置了loadko.ready为1,也就是说x3dispinit.sh依赖于load_ko.sh的执行,load_ko.sh是insmod ko的脚本

...
setprop loadko.ready 1
...

添加一个启动项

service <name><pathname> [ <argument> ]*
 class xxx
 oneshot 
 console

1、如果要添加的启动脚本,对某些ko有依赖,可以类似x3dispinit.sh属于class loadko_ready,表示在ko被insmode之后再执行,如果没有特殊的依赖,
都可以属于这个class
2、如果脚本是在文件系统建立好之后,就可以运行,可以属于class popvol_ready,这个类依赖于populate-volatile.sh,populate-volatile.sh负责建立一
些常用目录和链接,如/tmp, /var等等,并且他已经依赖了sysfs,mountall等其他启动项,这个脚本启动完成后,文件系统以建立完毕。
3、如果你写了多个脚本A.sh,B.sh,且B.sh对A.sh有依赖,那可以,A仍然依赖于populate-volatile.sh,B依赖于A,并在A中启动B

service A A.sh
 class popvol_ready
service B B.sh
 class A_ready
on property popvol.ready=1
 class_start popvol.ready
[A.sh]
...
setprop A.ready 1
...

属性的名称有如下规则
属性名称的长度必须大于等于1,小于32
属性名称不能以".“开头和结尾
属性名称不能出现连续的”."
属性的名称必须以"."为分隔符,且只能使用:‘0’-‘9’、‘a’-‘z’、‘A’-‘Z’、’-‘及’_'等字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值