简介
嵌入式Arm平台设备采用EmbeddedLinux操作系统进行开发早已越来越成为主流,本文就注重说明在EmbeddedLinux下配置应用程序开机自启动的方式,并就基于Qt的应用程序死机自启动脚本的配置进一步说明。
本文所演示的平台来自于ToradexColibriiMX6嵌入式平台,基于NXPiMX6系列核心为Cotrex-A9的Arm处理器。
打算
a).ToradexColibriiMX6模块EmbeddedLinux开发上手臂南请参考这儿。
b).本文使用的启动应用程序为如下两个,分别为一个consoleapplication和QtApplicationlinux运行应用程序,功能都是简单的GPIO控制。
./Consoleapplication–
./QtApplication-
使用Systemd形式配置开机自启动
a).systemd是当前Linux主流用于系统和服务管理的组件,同时也代替了过去的SysVinit系统,关于systemd的介绍请见这儿。
b).System使用以”.service”结尾的unit配置文件来管控一个进程,Service文件通常储存于“/etc/systemd/system/”或者“/lib/systemd/system/”目录下,并可以通过systemctl命令来启动,使能或则关掉等操作,例如:
重新加载systemdunit配置文件
#systemctl--systemdaemon-reload
查看一个service的状态,启动和停止这个service(本次启动有效)
#systemctlstatusxxx.service
#systemctlstartxxx.service
#systemctlstopxxx.service
使能或关掉一个service(上次启动有效)
#systemctlenablexxx.service
#systemctldisablexxx.service
c).以systemd形式开机启动本文第二章节的consoleapplication的service示例文件如下,关于consoleapplication的说明请参考这儿,只是文章是基于imx7的,对于imx6GPIO的号码须要更改。
d).布署测试
首先将编译好的gpiointtest二补码程序复制到imx6模块对应目录
#cpgpiointtest/usr/bin
之后将service文件复制的imx6模块对应目录,并使能service
#cpgpioint_demo.service/etc/systemd/system
#systemctl--systemdaemon-reload
#systemctlenablegpioint_demo.service
最后重新启动后,在并口复印log信息中可以见到service早已启动的信息
……
[OK]Startedgpiointtestservice,GPIOinterruptandoutputcontrol.
……
此时在载板后边配合按钮和LED,可以发觉程序早已在后台正常工作了
e).由于通过systemd启动的进程都是以daemon状态运行,即在后台运行,没有终端或界面显示,因而假如要启动一个有GUI的程序,就要通过一个启动脚本,这个在前面针对Qt程序开机启动章节有进一步介绍。
Qt应用开机启动配置
a).本章节介绍QtApplication基于上述systemd开机自启动方式,由于service进程都是后台进程,因而启动如Qt应用这样的GUI应用程序,不仅service文件,还须要一个启动脚本来配合。
b).以systemd形式开机启动本文第二章节的Qtapplication的service示例文件如下,关于此Qtapplication的说明请参考这儿。
qtdemo_launch.service-
c).配合使用的脚本程序按照调用的显示模块不同而不同,下边分别示例基于framebuffer和X11显示:
./基于framebuffer(此处使用linuxfb,也可以换为eglfs)和tslib的启动脚本“qtdemo.sh”请参考如下:
qtdemo.sh-
./目前Qt5的主要版本早已支持直接基于X11显示,因而也可以基于X11配置脚本,下边基于X11启动上述Qt应用的启动脚本示例如下:
qtdemo_x11.sh-
不过为了配合这个脚本linux运行应用程序,要略微改动下service文件如下:
……
[Service]
Type=forking
ExecStart=/usr/bin/qtdemo_x11.shstart
ExecStop=/usr/bin/qtdemo_x11.shstop
……
另外,若果配合使用内阻式触摸屏,发觉校正不对linux site:infoq.cn,在Qt程序启动后linux系统下载,可以在调试并口下进行如下操作理由xinput来校正并保存校正数据:
首先运行下边校正程序,通过点击在屏幕上的校正点进行校正
#xinput_calibrator
校正结束后,将复印信息中Section"InputClass"开始到EndSection部份复制下来,类似如下
Section"InputClass"
Identifier"calibration"
MatchProduct"stmpe-ts"
Option"Calibration""37241833686323"
Option"SwapAxes""0"
EndSection
创建如下文件,之后将里面的信息复制到"99-calibration.conf"文件上面并保存
#mkdir/etc/X11/xorg.conf.d
#cd/etc/X11/xorg.conf.d
#vi99-calibration.conf
重启后,校验数据会手动生效了,此时手动启动的Qt程序触摸应当可以正常使用了
其他应用开机自启动方式
不仅使用systemd,也有一些其他方式创建应用开机自启动下边逐一介绍
a).Shells
当通过并口,SSH或则图形界面进行login操作的时侯,/etc/profile文件以及/etc/profile.d目录下的所有脚本文件就会被执行,因而也可以在此目录下创建基于login的一些开机自启动操作,不过此方式不太适宜启动小型应用,更适宜做一些环境变量配置等小任务。
b).图形化界面形式
当登陆图形化界面时侯,lxsession会话管理器可以通过下边两种形式手动启动应用程序:
./LXDElxsession专用方式,坐落/etc/xdg/lxsession/LXDE/autostart文件和~/.config/lxsession/LXDE/autostart文件上面的条目会被解析。
如下示例添加lxterminal启动项到autostart文件
@lxpanel--profileLXDE
@pcmanfm--desktop--profileLXDE
@xscreensaver-no-splash
@lxterminal
较通用方式,适用于多数会话管理器,坐落/etc/xdg/autostart/目录以及~/.config/autostart/目录以.desktop结尾的文件会被解析执行,关于.desktop文件的详尽说明可以参考。
一个同样配置lxterminal开机启动的.desktop文件示例如下
[DesktopEntry]
Name=LXTerminal
Type=Application
Exec=lxterminal
Terminal=false
如需取消开机自启动,可将上述文件删掉或则添加如下内容即可
NotShowIn=LXDE
总结
本文演示了基于Arm平台EmbeddedLinux下普通应用和Qt应用程序开机自启动方式供参考。