linux 自启程序日志,嵌入式ARM平台基于Linux配置应用程序开机自启动

By Toradex秦海

1).简介

平台设备采用Embedded Linux操作系统进行开发已经越来越成为主流,本文就着重说明在EmbeddedLinux下配置应用程序开机自启动的方法,并就基于Qt的应用程序卡机自启动脚本的配置进一步说明。

本文所演示的平台来自于ToradexColibriiMX6嵌入式平台,基于NXP iMX6系列核心为Cotrex-A9的ARM处理器。

2.准备

a模块Embedded Linux开发上手指南请参考。

b).本文使用的启动应用程序为如下两个,分别为一个console application和Qt Application,功能都是简单的GPIO控制。

3).使用Systemd方式配置开机自启动

a). systemd是当前Linux主流用于系统和服务管理的组件,同时也取代了过去的SysVinit系统,关于systemd的介绍请见。

b). System使用以 ”.service”结尾的unit配置文件来管控一个进程,Service文件一般存放于“/etc/systemd/system/”或者 “/lib/systemd/system/”目录下,并可以通过systemctl命令来启动,使能或者关闭等操作,比如:

----------------------------------------

#重新加载 systemdunit配置文件

$ systemctl --system daemon-reload

#查看一个service的状态,启动和停止这个service(本次启动有效)

# systemctl status xxx.service

# systemctl start xxx.service

# systemctl stop xxx.service

#使能或关闭一个service(下次启动有效)

# systemctl enable xxx.service

# systemctl disable xxx.service

----------------------------------------

c).以systemd方式开机启动本文第二章节的console application的 service示例文件如下,关于console application的说明请参考,只是文章是基于imx7的,对于imx6 GPIO的号码需要修改。

d).部署测试

----------------------------------------

#首先将编译好的gpiointtest二进制程序复制到imx6模块对应目录

$ cp gpiointtest /usr/bin

#然后将service文件复制的imx6模块对应目录,并使能service

$ cp gpioint_demo.service /etc/systemd/system

$ systemctl --system daemon-reload

$ systemctl enable gpioint_demo.service

#最后重新启动后,在串口打印log信息中可以看到service已经启动的信息

……

[OK] Started gpiointtest service, GPIO interrupt and output control.

……

#此时在载板上面配合按键和LED,可以发现程序已经在后台正常工作了

----------------------------------------

e).因为通过systemd启动的进程都是以daemon状态运行,即在后台运行,没有终端或界面显示,因此如果要启动一个有GUI的程序,就要通过一个启动脚本,这个在后面针对Qt程序开机启动章节有进一步介绍。

4). Qt应用开机启动配置

a).本章节介绍Qt Application基于上述systemd开机自启动方法,因为service进程都是后台进程,因此启动如Qt应用这样的GUI应用程序,除了service文件,还需要一个启动脚本来配合。

b).以systemd方式开机启动本文第二章节的Qt application的 service示例文件如下,关于此Qt application的说明请参考。

c).配合使用的脚本程序根据调用的显示模块不同而不同,下面分别示例基于framebuffer和X11显示:

./基于framebuffer(此处使用linuxfb,也可以换为eglfs)和tslib的启动脚本 “qtdemo.sh”请参考如下:

./目前Qt5的主要版本已经支持直接基于X11显示,因此也可以基于X11配置脚本,下面基于X11启动上述Qt应用的启动脚本示例如下:

不过为了配合这个脚本,要略微改动下service文件如下:

----------------------------------------

……

[Service]

Type=forking

ExecStart=/usr/bin/qtdemo_x11.sh start

ExecStop=/usr/bin/qtdemo_x11.sh stop

……

----------------------------------------

另外,如果配合使用电阻式触摸屏,发现校准不对,在Qt程序启动后,可以在调试串口下进行如下操作理由xinput来校准并保存校准数据:

----------------------------------------

#首先运行下面校准程序,通过点击在屏幕上的校准点进行校准

$ xinput_calibrator

#校准结束后,将打印信息中Section "InputClass"开始到EndSection部分复制出来,类似如下

Section "InputClass"

Identifier"calibration"

MatchProduct"stmpe-ts"

Option"Calibration""3724 183 3686 323"

Option"SwapAxes""0"

EndSection

#创建如下文件,然后将上面的信息复制到"99-calibration.conf"文件里面并保存

$ mkdir /etc/X11/xorg.conf.d

$ cd /etc/X11/xorg.conf.d

$ vi 99-calibration.conf

#重启后,校准数据会自动生效了,此时自动启动的Qt程序触摸应该可以正常使用了

----------------------------------------

5).其他应用开机自启动方法

除了使用systemd,也有一些其他方法创建应用开机自启动下面逐一介绍

a). Shells

当通过串口,SSH或者图形界面进行login操作的时候,/etc/profile文件以及/etc/profile.d目录下的所有脚本文件都会被执行,因此也可以在此目录下创建基于login的一些开机自启动操作,不过此方法不太适合启动大型应用,更适合做一些环境变量配置等小任务。

b).图形化界面方式

当登录图形化界面时候,lxsession会话管理器可以通过下面两种方式自动启动应用程序:

./LXDE lxsession专用方法,位于 /etc/xdg/lxsession/LXDE/autostart文件和~/.config/lxsession/LXDE/autostart文件里面的条目会被解析。

----------------------------------------

#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值