• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-文件系统之应用开机自启

06/26 15:24
542
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

在busybox构建文件系统章节我们已经大概了解,文件系统启动后执行的第一个用户进程是init进程,init进程会解析etc/inittab文件,执行inittab中的各个子进程,打开文件系统中inittab文件:

第5行指定了系统启动进入的默认运行级别为5;

第9行是sysinit action,init程序会首先执行该进程;

第12行在单用户模式下需要执行的操作;

然后22-28就是系统不同的运行级别;

通过代码注释可知,级别0是halt模式,关闭系统;

级别1是单用户模式,级别2-5是多用户模式,级别6是重启系统;

在第5行已经指定了本系统运行级别为5,所以,在执行完成sysinit:/etc/init.d/rcS之后,会执行l5:5:wait:/etc/init.d/rc 5,这句代码是将5这个参数传给etc/init.d/rc脚本,然后执行etc/rc5.d目录下的所有脚本,打开etc/rc5.d目录:

可看到这些都是以S字符开头的符号链接,S符号之后的数字是,执行优先级别,由小到大依次执行。这些符号链接都有对应的脚本文件。我们通常将自己的自运行程序或者脚本放到优先级别最低的文件中,比如S99rc.local中,该符号链接所对应的脚本文件是etc/init.d/rc.local:

14:11 S99rc.local -> ../init.d/rc.local

在etc/init.d/rc.local中又会执行etc/rc.local,我们也可以把应用程序和脚本放到etc/rc.local中。当然也可以自己定义一个自启动脚本,然后在etc/rc5.d目录建立一个符号链接链接到此脚本。例如在etc/目录下自己创建了autorun.sh脚本文件,在etc/rc5.d目录下建立了符号链接S99autorun.sh,链接到了etc/autorun.sh文件:

3月  16  13:32  S99autorun.sh -> ../autorun.sh

现在将我们的应用放到autorun.sh中。首先,建立一个应用源程序文件my_app.c:

#include <stdio.h>

void main(void)

{

while(1)

{

printf("hello wold!!! rn");

sleep(1);

}

}

编译生成my_app:

. /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

elf@ubuntu:~/work/elf/rootfs$ $CC my_app.c -o my_app

通过nfs网络文件系统,或者其他方式将my_app复制到开发板文件系统usr/目录下。

然后,将my_app加入到etc/autorun.sh中后台运行:

#! /bin/sh

./usr/my_app &

保存退出,reboot重启系统后,程序运行:

若想关闭此应用:

使用ps –ef查看应用的进程号:

root@ELF1:~# ps –ef
root  618  1  0  10:23  ?  00:00:00  ./usr/my_app

kill关闭进程:

root@ELF1:~# kill 618

相关推荐