一、前言
某些情况下,我们希望板子一上电就能运行某些程序,不需要进入文件系统再去手动执行。以下说明如何去操作。不想看原理可以直接跳到操作部分。
二、原理
1. 相关文件
相关文件位于 /etc 下,主要有 inittab、init.d 和 rc.d 三个部分,不同版本的 Linux 系统目录层次可能不一样,但是名字不会变。
2. inittab
内核启动完成之后进入文件系统,运行第一个用户进程 init 进程。Init 进程会读取初始化运行级别文件 /etc/inittab。
该文件的 id:5:initdefault: 语句决定了系统启动时要进行哪些动作。其中“5”表示系统的 runlevel = 5,也就是系统启动首先要去执行 rc5.d 文件夹下的程序链接。可以修改,但不要改为 0 或 6,否则会开不了机或者一直重启。
3. rc.d
准确来说是 rc0.d ~ rc6.d,分别代表七个运行级别。
rc0.d:开机后关机(halt)
rc1.d:单用户模式
rc2.d ~ rc5.d:多用户模式
rc6.d:开机后重启(reboot)
每个运行级别具体执行什么动作,可以查看该运行级别的 rdx.c (x = 0~6)目录下的程序链接。例如:
链接的名称有固定规则:
S 表示 start 启动程序,相当于运行了 xxx start; K 表示 Kill 终止这个程序,相当于运行了 xxx stop。start 和 stop 的具体操作在脚本中实现,但一般 start 表示启动程序,stop 表示终止程序。
S/K 后面的数字表示执行顺序,数字越小,越先执行。
4. init.d
/etc/init.d 这个文件目录下存放的就是 rcx.d 里链接的所有脚本。
三、操作
目标:一开机就执行 /home/root/DMS/ 下的 ./wpi_dms_sonyimx224.elf 程序。
1. 创建运行脚本 run-dms
#!/bin/bash#!/bin/bash case "$1" in start) |
cd /home/root/DMS/
./wpi_dms_sonyimx224.elf
;;
stop)
ps -aux | grep ./wpi_dms_sonyimx224.elf | awk '{print $2}' | xargs kill -9
;;
esac
保存并退出,赋予脚本可执行权限:
root@s32v234evb:/etc/init.d# chmod 777 run-dms |
运行程序测试一下效果,无误则进入下一步。
root@s32v234evb:/etc/init.d# run-dms start |
2. 确认运行级别
查看 /etc/inittab,确认系统启动运行在 rc5.d:
3. 创建程序软链接
进入 /etc/rc5.d 目录并查看已有的链接。
在当前目录下创建自己想要执行的的程序的软链接,S 表示 run-dms start,99 数字大,最后再运行。此处不需要设置自动停止。
ln -s /etc/init.d/run-dms S99run-dms |
重启确认程序是否成功自启。
总结:以上为定义开机自启程序的全部操作,一般情况下开机后程序会自动运行,不需要手动控制了。
评论