5.4.2. 开机启动¶
RootFS /etc/init.d/
目录可以设置开机初始化脚本,这些脚本在登录之前被 linuxrc 执行。
小技巧
linuxrc 执行的内容和顺序可详细参考:package/third-party/busybox/inittab
Luban SDK 编译时,如何为项目安装开机初始化脚本?推荐如下几种方式
5.4.2.1. init.d 脚本¶
如果初始化脚本与某组件包相关,可以编写一个 init.d 脚本, 在该组件包安装文件时,将对应的脚本安装到 /etc/init.d/
目录
5.4.2.1.1. 脚本¶
Linux 对 init.d 脚本有统一的要求,可以百度解决,此处给一个简单的例子: S99qtlauncher, 其中 S99 为优先级,99说明优先级比较低
#!/bin/sh
#
# Start qtlauncher....
#
DAEMON="/usr/local/qtlauncher/qtlauncher"
DAEMONOPTS=" -platform=linuxrc"
PIDFILE=/var/run/qtlauncher.pid
start() {
printf "Starting qtlauncher: "
PID=`$DAEMON $DAEMONOPTS > /DEV/NULL 2>&1 & echo $!`
if [ -z $PID ]: then
printf "Fail \n"
else
echo $PID >$PIDFILE
printf "OK \n"
fi
}
stop() {
printf "Stopping qtlauncher: "
PID=`cat $PIDFILE`
if [ -f $PIDFILE]; then
kill -HUP $PID
printf "OK \n"
rm -f $PIDFILE
else
printf "pidfile not found \n"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?
5.4.2.1.2. 安装¶
继续上文的 S99qtlauncher:
package/artinchip/qtlauncher/qtlauncher.mk
define QTLAUNCHER_INSTALL_TARGET_CMDS
$(INSTALL) -m 0755 -D package/artinchip/qtlauncher/S99qtlauncher \
$(TARGET_DIR)/etc/init.d/S99qtlauncher
endef
5.4.2.2. RootFS Overlay¶
如果该脚本与具体的组件包没有直接的关系,与项目相关性较大,或者不方便放到具体的组件包中,则可以
放到 target/<chip>/<board>/rootfs_overlay/
目录,这样在生成 RootFS 镜像时,通过 Overlay 的方式
安装到镜像的 /etc/init.d/
目录中。
具体可参考 RootFS 。
5.4.2.3. initscripts¶
/etc/init.d/
目录是由 package/third-party/initscripts/
包进行安装创建的,
也可以将相关初始化脚本放在该包中进行安装。
需要修改 package/third-party/initscripts/initscripts.mk
中的 INITSCRIPTS_INSTALL_TARGET_CMDS
。
注解
多数的脚本都有与之相关的组件包,建议尽量采用第一、第二种方式进行安装,并不建议将过多的脚本放到 initscripts 包中进行安装。