开机启动
RootFS /etc/init.d/
目录可以设置开机初始化脚本,这些脚本在登录之前被 linuxrc
执行。
linuxrc 执行的内容和顺序可详细参考:package/third-party/busybox/inittab
Luban SDK 编译时,推荐使用以下几种方式为项目安装开机初始化脚本:
- init.d 脚本:如果初始化脚本与某组件包相关,可以编写一个 init.d 脚本, 在该组件包安装文件时,将对应的脚本安装到
/etc/init.d/ 目录。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 $?
安装 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
- RootFS Overlay
如果该脚本与具体的组件包没有直接的关系,与项目相关性较大,或者不方便放到具体的组件包中,则可以 放到
target/<chip>/<board>/rootfs_overlay/
目录,这样在生成 RootFS 镜像时,通过 Overlay 的方式 安装到镜像的/etc/init.d/
目录中。具体可参考 RootFS 。
- initscripts
/etc/init.d/ 目录是由 package/third-party/initscripts/ 包进行安装创建的, 也可以将相关初始化脚本放在该包中进行安装。
需要修改 package/third-party/initscripts/initscripts.mk 中的
INITSCRIPTS_INSTALL_TARGET_CMDS
。注:多数的脚本都有与之相关的组件包,建议尽量采用第一、第二种方式进行安装,并不建议将过多的脚本放到 initscripts 包中进行安装。