|
在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 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
|