【JokerのLinux】Debian 9 应用程序开机自启动。

软件环境:vivado 2017.4        硬件平台:XC7Z020


因为ZYNQ系列是PL+PS架构的,PL不用多说,有时钟就启动,但是PS这边就不同了,尤其是预装Linux系统的情况下,通常系统启动完毕到进入控制台,都有一个登录验证的过程,所以想让自己PS端的程序开机完毕后就进入自动运行:

1.要么把登录验证的这一步骤跳掉,直接以root身份进入系统,然后运行用户应用程序启动脚本

2.要么将用户应用程序路径加载带启动文件里,系统启动完毕后直接运行,与登录验证身份不冲突

先说下1,其实1这种方法才是最开始想做的,而且应该是比较正确的做法,但是Ubuntu、Debian、Linaro、Petalinux等分支文件结构是有差异的,就算是在同分支下,不同的版本之间也是有差异的,这就搞的当时在网上查资料的时候,尝试有些博主说的改动方法的时候,对应路径下的文件根本就找不到,或者根本就没有这种路径,在或者,同为Debian 9系统,虚拟机下的文件和移植到开发板的Debian 9系统同路径下的文件都不同,结果越搞越多,越搞越麻烦,干脆尝试第二种方式。

第2种方式是这样的,一定要先说清楚,只针对Debian 9 stretch,因为就像1说的,差异真的比较大。通常来说,需要自启动的应用程序路径都会添加在/etc/rc.local这个文件里面,然而搞笑的是,在Debian 9 stretch里/etc路径下,根本就没有rc.local这个文件,但是!!!通过systemctl status rc-local却能看到,rc.local这个服务却是存在的。

【JokerのLinux】Debian 9 应用程序开机自启动。_第1张图片

看紧贴着红框底部Active状态项,可以看到,此时的rc.local是非活动的服务。为了解决这个问题,我们需要自建rc.local文件。控制台输入cat </etc/rc.local,然后添加如下代码

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0
EOF

输入EOF时就代表代码段的结束。除了这种方法外,自己也可以新建文档,通过vi指令,向文档中添加相同代码(此时就不需要输入最下方的EOF了),记得文档名字必须是rc.local就行。

文件保存完毕后,通过chmod +x rc.local给文件加权限,然后移动文件到/etc路径下,reboot系统。

系统重启完毕后,控制台输入systemctl status rc-local再查看rc.local服务状态,可以看到已经是active了。

【JokerのLinux】Debian 9 应用程序开机自启动。_第2张图片

 此时说明自建的rc.local文件随系统启动已经没什么问题了,这时,将自己需要开机自动运行的程序路径,写到rc.local文件中的exit 0上方,即可完成自定义应用随系统开机自启动。


最后,再说些其他需要注意的事情:

1.rc.local这个文件最好在哪用就,在哪建立在哪添加文件内容,我的意思是,最好不要在windows端建立rc.local然后添加文档内容,再传给开发板,因为不同系统间文档的编码格式不同,有可能引起rc.local在开发板端没办法正常使用。

2.关于用户应用程序自启动的调试打印问题,我测试了两个应用程序,一个只做最简单的打印输出,另一个是不停的循环打印。其中,系统启动后,第一个测试程序并没有打印出来调试信息,进入系统后,通过ps指令看不到这个程序,但是通过top指令可以看到程序是正在运行的;第二个测试程序可以正常循环打印,进入系统后,通过ps指令依旧看不到这个程序,但是通过top指令也可以看到程序是正在运行的。还不清楚为什么会这样,但是程序应该都是能够正常开机自启动运行,等明白为什么了以后,会在下面做补充更新。

你可能感兴趣的:(JokerのLinux)