Edit online

开机启动

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 包中进行安装。