嵌入式ARM平臺基於Linux配置應用程序開機自啓動(fluxbox參考)

本文轉載於 http://www.eefocus.com/toradex/blog/18-01/426601_a6317.html,特此感謝


By Toradex秦海

1). 簡介

嵌入式ARM平臺設備採用Embedded Linux操作系統進行開發已經越來越成爲主流,本文就着重說明在EmbeddedLinux下配置應用程序開機自啓動的方法,並就基於Qt的應用程序卡機自啓動腳本的配置進一步說明。

 

本文所演示的平臺來自於ToradexColibri iMX6嵌入式平臺,基於NXP iMX6系列核心爲Cotrex-A9 的ARM處理器。

 

 

2. 準備

a). Toradex Colibri iMX6 模塊 Embedded Linux 開發上手指南請參考這裏

b). 本文使用的啓動應用程序爲如下兩個,分別爲一個console application 和 Qt Application,功能都是簡單的GPIO控制。

./ Console application – https://github.com/simonqin09/gpiointtest

./ Qt Application - https://github.com/simonqin09/QtGPIOProject

 

 

3). 使用Systemd 方式配置開機自啓動

a). systemd 是當前 Linux 主流用於系統和服務管理的組件,同時也取代了過去的SysV init 系統,關於systemd的介紹請見這裏

b). System 使用以 ”.service” 結尾的unit 配置文件來管控一個進程,Service 文件一般存放於“/etc/systemd/system/” 或者 “/lib/systemd/system/” 目錄下,並可以通過systemctl 命令來啓動,使能或者關閉等操作,比如:

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

# 重新加載 systemd unit 配置文件

$ 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的號碼需要修改。

https://github.com/simonqin09/gpiointtest/blob/master/gpioint_demo.service

 

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的說明請參考這裏

qtdemo_launch.service - https://github.com/simonqin09/QtGPIOProject/blob/master/qtdemo_launch.service

 

c). 配合使用的腳本程序根據調用的顯示模塊不同而不同,下面分別示例基於framebuffer和X11顯示:

./ 基於framebuffer(此處使用linuxfb,也可以換爲eglfs)和tslib的啓動腳本 “qtdemo.sh”請參考如下:

qtdemo.sh - https://github.com/simonqin09/QtGPIOProject/blob/master/qtdemo.sh

./ 目前Qt5的主要版本已經支持直接基於X11顯示,因此也可以基於X11配置腳本,下面基於X11啓動上述Qt應用的啓動腳本示例如下:

qtdemo_x11.sh - https://github.com/simonqin09/QtGPIOProject/blob/master/qtdemo_x11.sh

 

不過爲了配合這個腳本,要略微改動下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文件裏面的條目會被解析。

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

# 如下示例添加lxterminal 啓動項到autostart文件

@lxpanel --profile LXDE

@pcmanfm --desktop --profile LXDE

@xscreensaver -no-splash

@lxterminal

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

./ 較通用方法,適用於多數會話管理器,位於 /etc/xdg/autostart/ 目錄以及 ~/.config/autostart/ 目錄以 .desktop 結尾的文件會被解析執行,關於 .desktop 文件的詳細說明可以參考這裏

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

# 一個同樣配置 lxterminal 開機啓動的 .desktop 文件示例如下

[Desktop Entry]

Name=LXTerminal

Type=Application

Exec=lxterminal

Terminal=false

 

# 如需取消開機自啓動,可將上述文件刪除或者添加如下內容即可

NotShowIn=LXDE

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

 

 

6). 總結

本文演示了基於ARM平臺 Embedded Linux 下普通應用和Qt應用程序開機自啓動方法供參考。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章