ARM板設置開機自啟動應用程序
解決了開發板開機自啟動應用程序的問題,寫此博客用來記錄,方便以后查閱。
1、環境
開發板: 英創開發板
開發環境:Ubuntu16.04
IDE: QtCreater4
構建套件:qmake4 + arm-linux-g++
2、開機啟動文件
每個板子都可能有不同的Linux內核,故啟動文件不近相同,舉例:
/etc/init.d/rcS
/etc/init.d/rc.local
/etc/profile
/usr/etc/rc.local
我的板子上是/etc/profile
3、添加啟動命令
進入開機啟動文件,在最后一行添加需要執行的命令。
如:
#./work/test_log 代表直接開機執行/work下的test_log可執行文件 #cd /work #./test_log 拆解成兩步執行(存在問題,每次開啟一個新連接,輸入用戶后就會運行一個程序,累加進行)
還可以使用開發板資料中的方法,安裝燒寫軟件,直接將程序燒寫到NandFlash
4、程序后台運行
程序啟動命令后添加&,進入后台啟動程序
程序可以使用命令nohup & 支持后台運行,關閉終端后,程序也會繼續運行
完整命令:
nohup ./work/test_log > /dev/null &
將輸出重定向到null設備(忽略輸出),此命令支持遠程服務器后台運行程序,
開機自啟可以不使用nohup &
關閉nohup ,使用 ps -A查看所有進程,使用kill命令+進程號。
5、要明確程序運行目錄和程序所在目錄
我就遇到這個問題,我的程序需要讀取配置文件。程序手動運行,沒有任何問題;開機自啟動,無法讀取到配置文件,配置文件不存在。
最后發現開機自啟程序運行目錄和程序所在目錄不一致。
介紹Qt兩個函數,獲取程序運行目錄和程序所在目錄
/獲取程序所在的目錄 qDebug()<<"current applicationDirPath: "<<QCoreApplication::applicationDirPath(); //獲取當前程序所在工作目錄 qDebug()<<"current currentPath: "<<QDir::currentPath();