[摘 要]嵌入式系統(tǒng)和Linux的有機結合,成為后Pc時代計算機最普遍的應用形式。由于嵌入式Linux具有天生秉承的優(yōu)勢,有越來越多的程序員投身于嵌入式linux系統(tǒng)應用程序的開發(fā),本文結合開發(fā)實例介紹了在嵌入式linux系統(tǒng)上開發(fā)應用程序的過程。
[關鍵詞]嵌入式系統(tǒng)inux 軟件開發(fā)
嵌入式Linux由于代碼開放性以及強大的網(wǎng)絡功能,在中低端的嵌入式網(wǎng)絡設備中應用起來,比起PSOS+,VxWorks等專用系統(tǒng)有許多優(yōu)勢,Linux甚至還支持藍牙技術,這使得越來越多的企業(yè)和科研機構已經(jīng)把目光轉向了嵌入式Linux的開發(fā)和應用上。以下通過實例來介紹基于嵌入式Linux的應用軟件的開發(fā)過程:
一、宿主機配置
絕大多數(shù)的linux軟件開發(fā)都是以native方式進行的,即本機(Host)開發(fā)、調試、本機運行的方式。這種方式通常不適合嵌入式系統(tǒng)軟件開發(fā)。通常的嵌入式系統(tǒng)的軟件開發(fā)采用采用主一從模式。交叉編譯調試環(huán)境建立在宿主機上,對應的開發(fā)板叫做目標板,通過串行口或以太網(wǎng)口,使目標板和宿主機相連。宿主機是INTEL處理器,而目標板上,則是ARM、Motorola PowerPC、ColdFire等等,GNU編譯器能提供這樣的功能,在編譯編譯器時可以選擇開發(fā)所需的宿主機和目標機從而建立開發(fā)環(huán)境,所以宿主機是必不可少的。
筆者建議宿主機采用REDHAT9.0,當然REDHAT7.2/7.3的系統(tǒng)也都是可以用的,但鑒于市面上目前能買到的都是REDHAT9.0,所以建議采用REDHAT9.0,安裝過程可查閱相關手冊。
宿主機配置中一個常見的問題就是NFS的配置,這里介紹一種較為直接簡單的方法:首先在REDHAT LINUX PC機上執(zhí)行setup,彈出菜單界面后,選中:System services,回車進入系統(tǒng)服務選項菜單,在其中選中[*],然后退出setup界面返回到命令提示符下。
vim /etc/exports
將這個默認的空文件修改為只有如下一行內容:
/(rw)
然后保存退出(:wq)。然后執(zhí)行如下命令:
/etc/re.d/init.d/afs re~tarl
Shutting down NFS mountd:[0K]
Shutting down NFS daemon:[0K]
Shutting down NFS quotas:[0K]
Shutting down NFS services:[0K]
Starting NFS servicca:[0K]
Starting NFS quotas:[0K]
Starting NFS daemon:[0K]
Starting NFS mountd:[0K]
注意,這種方法有個弊端,就是NFS不是每次都自動啟動的,即無法像linuxconf命令那樣設置成Automatic啟動方式,所以每次重啟都要執(zhí)行一下:
/etc/re.d/init.d/nfa reatarl
配置完成后,可用如下辦法簡單測試一下NFS是否配置好了,在宿主機上自己mount自己,看是否成功就可以判斷NFS是否配好了。例如在宿主機/目錄下執(zhí)行:
mount 192.168.0.2:/ /rant
然后到/mnt/目錄下看是否可以列出/目錄下的所有文件和目錄,可以則說明mount成功,NFS配置生效。
二、應用軟件開發(fā)模式
嵌入式Linux應用程序開發(fā)主要有兩種模式。
(1)先在宿主機上調試通過后,再移植到目標板上。這種方法需要跨越嵌入式系統(tǒng)開發(fā)中的仿真工具(ICE)的障礙,移植工作相對較復雜,在此不作闡述,請查相關書籍。
(2)直接在目標板上開發(fā),這是一種通用的開發(fā)模式。采用這種方式時將宿主機與目標板通過串口或以太網(wǎng)口連接,在宿主機上運行minicom作為目標板的顯示終端,mount上宿主機硬盤直接在目標板上調試應用程序。目標板上程序的調試有兩種方法。一種是程序的執(zhí)行信息通過minicom來進行顯示。這是最常用的一種調試手段。另一種是通過log記錄文件。例如使用syslog將應用程序運行過程中間信息全部記錄 /var/log/sys.1og下。
三、應用軟件開發(fā)實例
這里用一個簡單的程序來說明如何進行應用程序的編寫和調試。首先宿主機上編寫應用程序(這里選用hello.c程序)并且編譯通過,makefile文件的編寫如下:
EXEC=hello
0BJS= hello.o
FLTFLAGS= - s 8 192
ALL:S(EXEC)
S(EXEC):S(OBJS)
S(LD)S(LDFLAGS)- 0 S@.elfS(OBJS)S(LDLIBS)
S(CONVERT)cp S(EXEC)../../romfs/bin
Cp-f hel1o /
clean:
-rm-fS(EXEC)*.Elf*.gbd*.o
按照上面提到的第二種模式的開發(fā)流程,啟動minicom作為目標板的仿真終端,在minicom下運行如下命令:
mount 192.168.0.2:/ /rant
mount宿主機上存放該程序的目錄,然后在minicom下執(zhí)行:
cd/mnt
/hello
運行結果顯示“Hello,World”,如果有問題可以切換去編輯編譯,再重新執(zhí)行重新修改后的新程序。這樣反復調試、更改、編譯再調試,而不再燒寫板子,直到應用程序達到要求為止。最后是調用燒寫程序,將最終確定的image.bin燒寫到板子上,則應用程序就出現(xiàn)在板子上了。
四、結論
本文對如何進行基于嵌入式Linux系統(tǒng)應用程序的開發(fā)做了詳細的說明,使讀者通過簡單的學習就能迅速掌握軟件開發(fā)模式,以便今后進一步深入應用程序的開發(fā),也希望本文能激起您在嵌入式Linux系統(tǒng)上開發(fā)應用程序的興趣。
參考文獻:
[1] Scott Maxwel1:Linux內棱源代碼分析[M].北京:機械工業(yè)出版社,2000
[2]王學龍:嵌入式Linux系統(tǒng)設計與應用[M].北京:清華大學出版社,2001
[3]萬加富等:網(wǎng)絡監(jiān)控系統(tǒng)原理與應用[M].北京:機械工業(yè)出版社,2000
[4]邢國良等:基于LinUX的實時操作系統(tǒng)的分析與研究[J].小型徽型計算機系統(tǒng),2001,22(8):1018—1021