硬件参数:AM3354
详细参数:https://blog.csdn.net/Ternence_zq/article/details/109691911
linux系统启动流程可以简单总结为以下几步:
1)开机BIOS自检,加载硬盘。
2)读取MBR,进行MBR引导。
3)grub引导菜单(Boot Loader)。
4)加载内核kernel。
5)启动init进程,nit进程是Linux的根进程,所有的系统进程都是它的子进程。依据inittab文件设定运行级别
6)init进程,执行rc.sysinit文件。
7)启动内核模块,执行不同级别的脚本程序。
8)执行/etc/rc.d/rc.local
9)启动mingetty,进入系统登陆界面。
网上资料自启动方法(未成功)
我们想让开发板开机自启动用户的应用程序,在 /etc/init.d/rcS shell脚本文件中,添加执行用户程序的语句。但是我通过这种方法还是未能实现程序开机自启动。
即使将开机用户登录都改成自启动,也是没有用。
开机自启动用户登录:https://blog.csdn.net/Ternence_zq/article/details/109869637
这里是在/etc/init.d/rcS脚本中,执行用户程序路径当中的S50_rcsApp脚本,这里注意文件的路径。
#!/bin/sh
if (test -d /apps/etc/init.d)
then
for i in /apps/etc/init.d/S??* ;do
$i
done
fi
可执行程序的启动如下:
/etc/init.d >: cd /apps/etc/init.d/
/apps/etc/init.d >: ls
S50_rcsApp
/apps/etc/init.d >: cat S50_rcsApp
#/bin/bash
#start user app shell
cd /apps/test_2020
./test_Widget
注意: 这里的S50_rcsApp文件中,最好使用cd
移动到可执行文件路径中,再执行程序,若写成相对路径(…/apps/test_2020/test_Widget),会由于当前执行脚本的路径不同,而找不到可执行文件。
成功的自启动方法
通过看linux系统启动流程,发现这些配置文件和脚本的的执行顺序是 /etc/inittab
、/etc/init.d/rcS
、/etc/profile
,那么在开发板的/etc/profile
文件中配置的都是QT、tslib等环境变量,那么执行(QT)程序,应该是先配置/etc/profile
文件
在/etc/profile
文件最后加入以下语句:
# start user shell start script
cd /apps/etc/init.d
./S50_rcsApp
这时将上面自定义的程序启动脚本S50_rcsApp,放在/etc/profile中,即可成功解决该问题。
弊端: 开机之后,用户所在路径不再是根文件目录,而是/etc/profile
执行S50_rcsApp
脚本中cd /apps/etc/init.d
的目录
/apps/etc/init.d >: ls
S50_rcsApp
参考链接:https://blog.csdn.net/weixin_39371711/article/details/79422533