yocto添加开机启动编译脚本 |
您所在的位置:网站首页 › 嵌入式linux开机启动脚本 › yocto添加开机启动编译脚本 |
yocto添加开机启动脚本 在平台开发时我们经常会遇到在编译时想让一个程序开机就自动启动,且这个程序必须在依赖的程序启动后才启动。比如等模组拨号成功后才开始FOTA的check。 这篇文章将介绍下如何将一个服务程序在一些特定的时候启动 下面将以start_manager_server_le为例,他是一个运行脚本,欲控制开机启动的程序为/usr/bin/qmanager_server。 start_manager_server_le的内容如下: #! /bin/sh #qmanager_server是你想要开机运行的程序 DAEMON=/usr/bin/qmanager_server set -e case "$1" in start) echo -n "Starting qmanager_server: " echo "QMS:start" > /dev/kmsg start-stop-daemon -S -b -x $DAEMON echo "done" ;; stop) echo -n "Stopping qmanager_server: " rmmod qcom_emac rmmod at803x rmmod qca8337 rmmod of_mdio rmmod libphy start-stop-daemon -K -x $DAEMON echo "done" ;; restart) $0 stop $0 start ;; *) echo "Usage $0 { start | stop | restart}" >&2 exit 1 ;; esac exit 0在build目录里增加一个bb文件 poky/meta-bsp/recipes-prop/quectel/qmanager_git.bb。bb文件是用来控制编译过程的 DESCRIPTION = " Manager Modules" PR = "r21" DEPENDS = "diag dsutils qmi-framework data" S = "${WORKDIR}/manager" SRC_DIR = "${WORKSPACE}/manager/" INITSCRIPT_NAME = "start_manager_server_le" INITSCRIPT_PARAMS = "start 99 2 3 4 5 ." inherit update-rc.d do_install_append() { install -m 0755 ${WORKDIR}/manager/server/src/start_manager_server_le -D ${D}${sysconfdir}/init.d/start_manager_server_le } FILES_${PN} += "${base_libdir}/firmware/wlan/qca_cld"其中我们只需要关注下面这三行 INITSCRIPT_NAME = "start_manager_server_le" INITSCRIPT_PARAMS = "start 99 2 3 4 5 ." inherit update-rc.d这三个参数的介绍如下 # Inherit the update-rc.d.bbclass file located in openembedded/classes/. # This will take care of setting up startup links when the package is # installed. inherit update-rc.d # Tell the update-rc.d package which program will be used as the startup # script. # The script will be called with the "start" command at system # startup, the "stop" command at system shutdown, and the "restart" command # when the package is updated. INITSCRIPT_NAME = "init-example-script" # Run the command at step 90 during startup, and step 10 during shutdown. # Because the numbers go from 00 - 99, larger numbers will be run later on. # If your program is required for system startup, put a low number here. # If it's user-facing or less critical for system startup, put a higher # number here. # As a tradition, the shutdown number should be 100-startup_number. That # way scripts are stopped in the reverse order they were started in. Since # our startup number here is 90, the shutdown number will be 100-90 or 10. INITSCRIPT_PARAMS = "defaults 90 10"意思是在bb文件里加上这三行后,编译时会调用update-rc.d,在制作的文件系统里的/etc/rcX.d 路径下创建一个指向将 /etc/ini.d/INITSCRIPT_NAME 的软链接(rcX.d里的X是当前系统的runlevel,可以通过runlevel查看,注意不是编译机的runlevel) 其中INITSCRIPT_PARAMS这个参数是执行update-rc.d命令时传递过去的参数 /etc路径下有多个以rc开头的文件夹: /etc # ls -l |grep rc ls -l |grep rc -rw-r--r-- 1 root root 1633 Aug 9 09:57 inputrc drwxr-xr-x 3 root root 368 Aug 13 01:31 rc.d drwxr-xr-x 2 root root 2656 Aug 9 10:11 rc0.d drwxr-xr-x 2 root root 2136 Aug 9 10:11 rc1.d drwxr-xr-x 2 root root 3456 Aug 9 10:11 rc2.d drwxr-xr-x 2 root root 3456 Aug 9 10:11 rc3.d drwxr-xr-x 2 root root 3384 Aug 9 10:11 rc4.d drwxr-xr-x 2 root root 3760 Aug 9 10:11 rc5.d drwxr-xr-x 2 root root 2592 Aug 9 10:11 rc6.d drwxr-xr-x 2 root root 1648 Aug 9 10:11 rcS.drc后面的数字代表的是runlevel,系统在一个时间点只有一个runlevel,可以通过runlevel命令来查看当前系统的runlevel /etc/rc5.d # runlevel runlevel N 5linux的runleve有如下类别 另外在每个runlevel下有很多的sub runlevel,序号从0-99,序号越大启动越靠后。 /etc/rc[runlevel].d/路径下的脚本是会开机启动的。且这个路径下的启动脚本是根据sub runlevel的大小先后启动的 Example: INITSCRIPT_PARAMS = "start 99 2 3 4 5 ."99代表的是sub runlevel,2代表的是runlevel 因此烧完版本后你可以看到/etc/rc2.d路径下多了一个 S99start_manager_server_le的软连接,软连接前面的S99就是这个脚本的sub runlevel. |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |