1. 程式人生 > >如何在linux嵌入式開發板上開機自動執行使用者應用程式

如何在linux嵌入式開發板上開機自動執行使用者應用程式

開機後自動執行使用者的應用程式或啟動系統服務的命令儲存在開發板根檔案系統的/usr/etc/rc.local檔案中。有的開發板開機後自動執行圖形介面程式,需要按住ctrl+c讓開發板進入到linux的SHELL提示符介面。其實可通過註釋掉rc.local檔案中呼叫圖形介面的命令,增加執行使用者應用程式的命令,達到開機自動執行使用者應用程式的目的。

下面以我做的實驗為例,描述具體的實現步驟。該方法源於網路,我加以驗證,稍做修改,此文相當於轉載。
1.進入pc機的Linux 作業系統,在/nfs/usr/下通過mkdir lz 命令新建一個名為lz的資料夾,進入lz資料夾,通過mkdir hello新建一個hello資料夾用來存放我們將要編寫的hello.c檔案和編譯生成的可執行檔案。
2.在/nfs/usr/lz/hello下通過vi hello.c命令新建hello.c檔案,編輯如下測試程式:
#include
int main(){
printf("Hello,test arm-linux!\n");
return 0;
}
完成編輯後通過:wq儲存後退出。
3.主機通過如下命令交叉編譯環境編譯hello.c:
#arm-linux-gcc –o hello hello.c
4.通過ls 命令可以看到在/nfs/usr/lz/hello/下已經生成了hello可執行檔案,我們可以在開發板上通過./hello來測試自己編寫的hello.c執行情況
5.修改rc.local檔案,在檔案的最後通過‘#’釋掉啟動圖形介面的指令,增加執行使用者應用程式hello的指令,具體實現如下:
#export PATH=$QPEDIR/bin:$PATH
#qtopia
#/usr/qtopia/bin/qtopia
/usr/lz/hello/./hello
注:前三行是註釋掉啟動圖形介面,最後一行是新增的執行使用者的hello測試程式。
6.重啟開發板,通過vivi引數配置讓開發板通過nfs掛載主機上的檔案系統,這時我們就可以通過超級終端看到開發板已經運行了我們編寫的hello程式。

從接觸linux系統下程式設計,一直困擾著我一個問題,就是我的程式應該怎樣執行。以前學習裸機程式和微控制器程式的時候,不用考慮這一問題,寫好的程式直接在上電的時候直接由啟動程式碼執行我的main函式。可是在有作業系統的情況下,我編譯好的程式怎樣執行呢?總不能我每次要手動去執行啊~!鬱悶了兩年了,呵呵,從2010.12月到2011.1月,期間邊學習linux下程式設計,邊尋找這方面的資料,哎,貌似這種技術對人家很簡單啊,百度上的很少,終於找到一篇,如下;
開機後自動執行使用者的應用程式或啟動系統服務的命令儲存在開發板根檔案系統的/usr/etc/rc.local檔案中。有的開發板開機後自動執行圖形介面程式,需要按住ctrl+c讓開發板進入到linux的SHELL提示符介面。其實可通過註釋掉rc.local檔案中呼叫圖形介面的命令,增加執行使用者應用程式的命令,達到開機自動執行使用者應用程式的目的。

下面以我做的實驗為例,描述具體的實現步驟。該方法源於網路,我加以驗證,稍做修改,此文相當於轉載。

1.進入pc機的Linux作業系統,在/nfs/usr/下通過mkdir lz命令新建一個名為lz的資料夾,進入lz資料夾,通過mkdir hello新建一個hello資料夾用來存放我們將要編寫的hello.c檔案和編譯生成的可執行檔案。

2.在/nfs/usr/lz/hello下通過vi hello.c命令新建hello.c檔案,編輯如下測試程式:#includeint main(){ printf("Hello,test arm-linux!\n"); return 0;}完成編輯後通過:wq儲存後退出。

3.主機通過如下命令交叉編譯環境編譯hello.c: #arm-linux-gcc –o hello hello.c

4.通過ls命令可以看到在/nfs/usr/lz/hello/下已經生成了hello可執行檔案,我們可以在開發板上通過./hello來測試自己編寫的hello.c執行情況

5.修改rc.local檔案,在檔案的最後通過‘#’釋掉啟動圖形介面的指令,增加執行使用者應用程式hello的指令,具體實現如下: #export PATH=$QPEDIR/bin:$PATH#qtopia#/usr/qtopia/bin/qtopia/usr/lz/hello/./hello注:前三行是註釋掉啟動圖形介面,最後一行是新增的執行使用者的hello測試程式。

6.重啟開發板,通過vivi引數配置讓開發板通過nfs掛載主機上的檔案系統,這時我們就可以通過超級終端看到開發板已經運行了我們編寫的hello程式。 

這個給了我很大啟發,我就順著rc.local結合自己的板子來試驗哈,我的是GT2440的板子,裡面沒有rc.local,但是發現有個rcS,原來這就是啟動指令碼,開啟我的rcS如下: [[email protected] init.d]# cat /etc/init.d/rcS

#! /bin/sh 

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel ## Trap CTRL-C &c only in this shell so we can interrupt subprocesses.#

trap ":" INT QUIT TSTP/bin/hostname GTStudio 

/bin/mount -n -t proc none /proc

/bin/mount -n -t sysfs none /sys

/bin/mount -n -t usbfs none /proc/bus/usb

/bin/mount -t ramfs none /dev 

echo /sbin/mdev > /proc/sys/kernel/hotplug/

sbin/mdev -s # mounting file system specified in /etc/fstab

mkdir -p /dev/pts

mkdir -p /dev/shm/bin/

mount -n -t devpts none /dev/pts -o mode=0622

/bin/mount -n -t tmpfs tmpfs /dev/shm

/bin/mount -n -t ramfs none /tmp

/bin/mount -n -t ramfs none /var

mkdir -p /var/empty

mkdir -p /var/log

mkdir -p /var/lock

mkdir -p /var/run

mkdir -p /var/tmp

/sbin/hwclock -s syslogd/etc/rc.d/init.d/netd start

echo " " > /dev/tty1

echo "Starting networking..." > /dev/tty1

sleep 1

etc/rc.d/init.d/httpd start

echo " " > /dev/tty1echo "Starting web server..." > /dev/tty1

sleep 1

/etc/rc.d/init.d/leds start

echo " " > /dev/tty1

echo "Starting leds service..." > /dev/tty1

echo " "

sleep 1

 /sbin/ifconfig lo 127.0.0.1/etc/init.d/ifconfig-eth0 /

bin/qtopia &echo " " > /dev/tty1

echo "Starting Qtopia, please waiting..." > /dev/tty1

在這基礎上我做了二個實驗,第一個就是在usr/sbin下複製寫好的openclose程式,在bin/etc/rc.d/init.d下編譯指令碼如下:#!/bin/sh

base=openclose# See how we were called.

case "$1" in start) /usr/bin/$base & ;; stop)

pid=`/bin/pidof $base` 

if [ -n "$pid" ]; 

then kill -9 $pid

 fi ;;

esacexit 0

剛開始以為這樣就可以了,重啟板子後,發現沒有執行,研究了哈/etc/init.d和/etc/rc.d/init.d的區別和聯絡,發現還得再/etc/init.d/rcS的腳本里寫進echo "Starting openclose" >/dev/tty1/etc/rc.d/init.d/openclose start 這樣才能執行,同樣如果輸入/etc/rc.d/init.d/openclose stop 則不能執行程式,我的理解是這etc/inir.d需要有指向etc/rc.d/init.d/openclose的語句,才能決定是否執行(start or stop)openclose裡的指向程式(本實驗室中base=openclose). 第二個實驗就是嘗試在etc/inir.d/rcS裡直接執行我的程式,剛開始通過直接入 ./mns/nfs/writeread/arm-linux-gcc-4.3.3/writeread(我這裡是通過nfs服務來執行我的程式的),發現不能執行,後來還是把writeread拷貝到usr/sbin裡,這樣通過./usr/sbin/writeread 開機就能直接執行 了。

相關推薦

如何在linux嵌入式開發開機自動執行使用者應用程式

開機後自動執行使用者的應用程式或啟動系統服務的命令儲存在開發板根檔案系統的/usr/etc/rc.local檔案中。有的開發板開機後自動執行圖形介面程式,需要按住ctrl+c讓開發板進入到linux的SHELL提示符介面。其實可通過註釋掉rc.local檔案中呼叫圖形介面的

嵌入式開發更換開機LOGO

1 先製作好想要的開機圖片,此圖片有是三個要求,畫素是要和螢幕解析度一樣、位深度為 24、圖片格式為bmp。我的螢幕是7寸的,所以我設定的解析度為800*480。如下圖 bmp格式圖片的資訊。 2利用製圖軟體製作 .bin 二進位制圖片。拷到開發板裡的圖片檔

迅為iTOP-4412開發以NFS方式除錯應用程式

本文講解一下通過 NFS 網路檔案系統來除錯我們的應用程式,我們這裡以 linux qt 系統為 例。 我們在 qt 系統上除錯應用的時候,首先是在虛擬機器 Ubuntu 上通過交叉編譯生成可執行的二進位制檔案, 然後把生成的二進位制檔案拷貝到檔案系統裡面,然後用命令重新生

移植QT5.6到嵌入式開發(史最詳細的QT移植教程)

文件傳輸 嵌入式環境 ubun 導致 字庫 etc -a led fill 目前網上的大多數 QT 移植教程還都停留在 qt4.8 版本,或者還有更老的 Qtopia ,但是目前 Qt 已經發展到最新的 5.7 版本了,我個人也已經使用了很長一段時間的 qt5.6 for

linux 開發的調試

設置 limit pid gdb調試 roc ++ bsp class 編譯 1、需要命令 ulimit 進行設置core file size , 看 core file size。 cat /proc/pid/limits, 這個暫時不用 2、需要有gdb命令 ,

linux-arm筆記2:如何在ubuntu安裝ftp,並且用ftp向arm開發傳檔案

[email protected]:~$ ftp 192.168.1.109    //arm開發板ip Connected to 192.168.1.109. 220 FriendlyARM FTP server (Version 6.4/OpenBSD/Linux-ftpd-0.17) read

Linux裝置驅動第一天學習筆記(如何將系統在開發執行起來、驅動開發基本步驟)

如何將系統在開發板上執行起來? 4.0 交叉編譯器的獲取?廠家提供 網上下載(廠家確認) 4.1 uboot進行操作? 1,解壓廠家原始碼 2,進入原始碼 3,make distclean 徹底刪除原始碼的目標、臨時檔案 4,make xxx_c

製作最小linux檔案系統燒錄到iTop-4412開發

使用的開發板為訊為iTop-4412精英版1,新建linux最小系統使用busybox,官網為http://www.busybox.net/這裡使用的版本是首先將busybox-1.21.1.tar.bz2拷貝到ubuntu系統下解壓,解壓命令: tar -xvf b

程式開發開機自啟動

按照《Hi3531/Hi3532 Linux 開發環境 使用者指南》裡面說的修改rcS進行設定 程式在板子上自啟動的過程中會出現問題: 1.將程式copy到/nand目錄下,儲存結果的文件result.txt應該在程式所在目錄。 2.在/etc/init.d/rcS

linux】ARM開發設定RTC時間,斷電重啟後,設定失效的原因分析

問題描述 linux中使用date設定時間後用hwclock -w同步到RTC,斷電重啟後,有時會失效 原因分析 儲存時間戳 1、使用命令關機(halt)會呼叫rc0.d中的指令碼; 2、使用命令重啟(reboot)會呼叫rc6.d中的指令碼;

linux-2.6.32在mini2440開發移植(10)之觸控式螢幕工作原理以及驅動程式詳細分析

第二部分輸入核心的作用如下: (1) 呼叫input_register_device() used to 新增裝置,呼叫input_unregister_device() 除去裝置。(下面會結合觸控式螢幕驅動講述) (2) 在/PROC 下產生相應的裝置資訊,下面這個例子即是: /proc/bus/input

如何在i.mx6dl開發移植udev並實現移動裝置的自動掛載

在整個移植過程中,我所使用的操作平臺: host:Ubuntu14.04 LTS board:MCIMX6DL-SDP udev版本:udev100 一、移植udev。 下載udev的原始碼並進行解

[嵌入式開發]iTOP-4412開發linux 系統儲存空間的修改

[嵌入式開發板]iTOP-4412開發板linux 系統儲存空間的修改 平臺:iTOP-4412開發板     這裡我們以修改成 1G 儲存空間為例來講解修改方法, 如果需要改 成其他大小的儲存空間,參照此方法修改即可。     首先連線好 iTOP-4412 開

在 S5PV210 的 開發 使用 串口 收發信息

devices type 編譯 打印 fin 參考 hello += 文件寫入 參考學習教程:周立功嵌入式Linux開發教程-(上冊) 材料:首先 準備一個 安裝好 Linux 的 開發板 使用 xshell 工具 連接 開發板 ,winscp 工具 連接

在 S5PV210 的 開發 點亮 一個 LED 燈

ubuntu 連接服務器 tde 教程 ins connect mage 參考 operation 參考學習教程:周立功嵌入式Linux開發教程-(上冊) 材料:首先 準備一個 安裝好 Linux 的 開發板 使用 xshell 工具 連接 開發板 ,wi

嵌入式開發ARM開發-迅為4418開發接口基本介紹

4418開發板 接口介紹 迅為4418開發板無縫兼容6818平臺,是北京迅為電子有限公司研發設計的一款開發板平臺,核心板尺寸小,引出腳多,能夠幫助工程師們快速開發新產品。行業應用:iTOP-4418開發板/6818開發板可廣泛適用於工控、智能家居、醫療、多媒體、安防、車載、金融、消費電子、手持設備、顯

Linux、UNIX設置開機自動運行命令、腳本配置

內容 自動 配置文件 ted under linux 鏈接 hp-ux ati 轉 http://blog.itpub.net/23135684/viewspace-668924/ unix 一般使用方法3,用於部署osw 方法一:編輯/etc/rc.d/rc.

linux (debian 8) 設置開機自動掛載

ont fda 軟件包 type debian 添加 ext image 51cto 首先,你的虛擬機得裝好debian的系統,並且iso鏡像的軟件包已經添加進去了(本教程全程在虛擬機實施) 第一步,要用有root權限的用戶登陸(我的是直接用root用戶登陸的) 第二步,創

linux系統下設置oracle開機自動啟動

echo 錯誤提示 實例 cal 不同 product 實現 方法 bst 在Linux系統中,安裝好oracle數據庫服務後,並不像在Windows系統下一樣,oracle服務在默認情況下會隨系統的啟動自動啟動。Linux系統中,是需要用戶去手動進行設置,才能實現orac

arm開發找不到/dev/i2c-*設備

linu arm The iic oar fig com 在一起 直接 最近在調試arm與外設iic通訊是,想來個投機取巧,先不寫單獨的驅動,直接通過iic bus設備是否可以連接到外設,然後發現在板子上找不到“/dev/i2c-n”的設備,標準的系統應該都是有的。 回去看