<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式Linux下基于MiniGUI的信息終端軟件開(kāi)發(fā)

嵌入式Linux下基于MiniGUI的信息終端軟件開(kāi)發(fā)

作者: 時(shí)間:2004-12-11 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:系統的開(kāi)發(fā)已成為新的行業(yè)熱點(diǎn)。本文首先概述系統開(kāi)發(fā)的特點(diǎn)及其工具,然后具體描述圖形系統的移植、使用方法,并舉例說(shuō)明在該系統上開(kāi)始軟件的過(guò)程。該方案有很大的應用前景。

關(guān)鍵詞:操作系統

引言

近年來(lái),隨著(zhù)軟硬件資源的成熟與完善,嵌入式技術(shù)越來(lái)越和人們的生活緊密相關(guān),功能單一的公用電話(huà)也開(kāi)始向嵌入式多媒體轉型。對嵌入式系統的研究,在全球激起了人們極大的興趣。

選擇開(kāi)放源碼的操作系統開(kāi)發(fā)新一代嵌入式產(chǎn)品已經(jīng)成為其中新的技術(shù)熱點(diǎn)。在本系統中,采用了MontaVista Linux系統。它提供了很多處理器、目標板和主機環(huán)境的組合,有一套完整的輔助開(kāi)發(fā)工具,便于嵌入式系統專(zhuān)用人員設計、開(kāi)發(fā)和發(fā)布應用程序。

與此同時(shí),配備一個(gè)優(yōu)秀的圖形用戶(hù)界面,使產(chǎn)品和用戶(hù)能進(jìn)行友善可靠的交互也已成為開(kāi)發(fā)工作中非常緊迫的要求。本系統中使用的就是嵌入式Linux系統下一個(gè)輕量級的圖形用戶(hù)界面支持系統,目前已比較成熟,并已被用到很多項目的實(shí)際開(kāi)發(fā)中。

1 嵌入式Linux系統

嵌入式系統是以應用為中心,以計算機技術(shù)為基礎,并且軟硬件可裁減。適用于用戶(hù)系統對功能、可靠性、成本、體積、功耗有嚴格要求的專(zhuān)用計算機系統。從20世紀80年代末開(kāi)始,陸續出現了一些嵌入式操作系統,如VxWorks、pSOS、WindowsCE、Linux等。其中免費源代碼的Linux操作系統因其內核小、支持多種硬件平臺、可裁減性好等顯著(zhù)優(yōu)點(diǎn),得到了廣泛的關(guān)注,為嵌入式系統開(kāi)發(fā)提供了一個(gè)極有力的選擇。

(2)MontaVista Linux

目前,已有多家公司推出了嵌入式Linux發(fā)行版本。本系統中采用的是應用全球三大嵌入式Linux供應商之一MontaVista Software公司的最新版MontaVista Linux3.0。它使用的是最標準Linux內核2.4.2,是針對嵌入式設備度身定制的實(shí)時(shí)的、專(zhuān)業(yè)的嵌入式操作系統??紤]到嵌入式設備處理器、存儲器資源有限的情況,在不減少新內核對嵌入設備有利特性的基礎上,MontaVista公司對內核部分進(jìn)行了高度裁減、配置,使MontaVista Linux 3.0。它使用的是標準Linux內核2.4.2,是針對嵌入式設備度身定制的實(shí)時(shí)的、專(zhuān)業(yè)的嵌入式操作系統??紤]到嵌入式設備處理器、存儲器資源有限的情況,在不減少新內核對嵌入設備有利特性的基礎上,MontaVista公司對內核部分進(jìn)行了高度裁減、配置,使MontaVista Linux 3.0系統性能具備穩定、突出等特點(diǎn),同時(shí)還為MontaVista Linux 3.0配備了一個(gè)由優(yōu)先級驅動(dòng)的實(shí)時(shí)調度器(RealTime Scheduler),從而使客戶(hù)對實(shí)時(shí)性的要求得到更大的滿(mǎn)足。

2 平臺

MontaVista Software公司在嵌入式Linux發(fā)行版中已提供了系統開(kāi)發(fā)所需的環(huán)境:

a)內核和文件系統工具――目標配置工具(TCT)、庫優(yōu)化工具(LOT);

b)交叉開(kāi)發(fā)工具――GNU GCC/C++編譯器、GDB源碼調試器、DDD圖形界面調試器等;

c)實(shí)時(shí)性能工具和分析工具。

系統內核則通過(guò)Abatron公司的BDI2000調試器進(jìn)行測試,內核運行于PowerPC體系的CPU上。該目標系統已實(shí)現以太網(wǎng)接口、串口、USB接口,LCD也能正常顯示。

3 系統框架結構

應用程序是最上層的開(kāi)發(fā),其交互界面直接通過(guò)MiniGUI圖形系統的API接口函數實(shí)現。MiniGUI屏蔽了對底層顯示、輸入設備編程的細節,使程序員更能專(zhuān)注于信息終端界面的特色上,從而縮短了編程投入時(shí)間。MiniGUI圖形率編譯安裝后一般以庫的形式存放在操作系統/usr/lib文件目錄下。

該嵌入式系統的框架結構如圖1所示。

4 MiniGUI的移植

(1)MiniGUI特點(diǎn)

MiniGUI是由魏永明主掛的一個(gè)自由軟件項目,現完全遵循GPL(General Public License)條款的純自由軟件,可以運行在任何一種具有POSIX線(xiàn)程支持的POSIX兼容系統上。MiniGUI在體系結構上有許多獨特之處。它的主要特色有:

a)提供了完備的多窗口機制;

b)對話(huà)框和預定義的控件類(lèi);

c)消息傳遞機制;

d)多字符集和多字體支持;

e)全拼、五筆等漢字輸入法支持;

f)BMP、GIF、JPEG等常見(jiàn)圖像文件的支持;

g)小巧,包含全部功能的庫文件大小為300KB左右;

h)可配置,可根據項目需求進(jìn)行定制配置和編譯;

i)可移植性好。

(2)MiniGUI的移植過(guò)程

要使MiniGUI運行在入式目標板PPC上,需在MontaVista Linux 3.0的交叉開(kāi)發(fā)環(huán)境下移植該圖形包。

MiniGUI 1.2.6版發(fā)布時(shí)含資源文件壓縮包minigui-res1.2.6.tar.gz、庫文件壓縮包libminigui-1.2.6.tar.gz和一個(gè)綜合示范程序mde-1.2.6.tar.gz。

在開(kāi)發(fā)主機上安裝好MontaVista Linux 3.0后,把主機NFS服務(wù)的輸出目錄配置為硬盤(pán)路徑/opt/hardhat/devkit/ppc/8xx/target。目標板運行起來(lái)后,會(huì )自動(dòng)掛載到該目錄下。

將該目標作為當前路徑安裝MiniGUI。

打開(kāi)資源文件壓縮包,執行如下命令

tar-xvf minigui-res-1.2.6.tar.gz

會(huì )自動(dòng)在當前路徑下生成minigui-res目錄。在該目錄下可以看到config.linux文件,修改其中TOPDIR=NONE一項,使TOPDIR=/opt/hardhat/devkit/ppc/8xx/target,此處的路徑對應的就是前面設置的NFS輸出目錄。運行安裝命令make install即可。

編譯庫文件壓縮包libminigui-1.2.6.tar.gz時(shí),解壓步驟如上。不同的是須在當前目錄下運行configure命令對庫文件進(jìn)行移植的配置。命令行如下:

CC=ppc_8xx-gcc./configure

--build=i386-linux

--target=ppc-unknown-linux

--prefix=/opt/hardhat/devkit/ppc/8xx/target

--libdir=/opt/hardhat/devkit/ppc/8xx/target/usr/lib

--includedir=/opt/hardhat/devkit/ppc/8xx/target/usr/include

--enable-debug

其中,ppc_8xx-gcc是針對PowerPC體系結構目標的編譯器,是MontaVista Linux提供的;build是指執行編譯的機器,這里是x86的開(kāi)發(fā)主機;target是運行該編譯器所產(chǎn)生目標文件的機器;prefix是所有安裝路徑的前綴;libdir是庫文件安裝路徑;includedir是頭文件安裝路徑;enable-debub指編譯時(shí)需包含調試信息。

配置完,運行編譯安裝命令。

綜合示范程序mde-1.2.6.tar.gz的安裝方法和庫文件類(lèi)似的。

此時(shí),啟動(dòng)目標板,在MontaVisa Linux的控制程序下,進(jìn)入/mde-1.2.6/mginit目錄,輸入命令行./③mginit運行MiniGUI的這個(gè)后臺服務(wù)器程序,出現一個(gè)有小企圖片的窗口管理器,并在左上角弱出一個(gè)控制臺程序的子窗口。在該控制臺下,可以運行mde中其它的示范例子。至此,MiniGUI圖形包在目標板上移植安裝完成。

5 信息終端

本系統中采用了MiniGUI專(zhuān)為嵌入式系統開(kāi)發(fā)的Lite版本。它客戶(hù)/服務(wù)器(C/S)體系,在服務(wù)器和客戶(hù)之間傳遞輸入設備數據,以及客戶(hù)和服務(wù)器之間的某些語(yǔ)法 和響應數據。

在該信息終端軟件中,就根據這種結構特點(diǎn),設計了一個(gè)服務(wù)器程序和兩個(gè)客戶(hù)進(jìn)程。服務(wù)器始終運行后臺,記錄有關(guān)系統信息,如系統計時(shí)、用戶(hù)刷卡余額等,通過(guò)MiniGUI提供的Socket機制通信將數據傳給下面的客戶(hù)程序。主界面客戶(hù)進(jìn)程給用戶(hù)提供了完整的操作體驗,用戶(hù)可以通過(guò)菜單選擇打電話(huà)、瀏覽信息等功能。另一客戶(hù)進(jìn)程則是廣告屏保,在無(wú)人使用的間隙時(shí)間里,可以動(dòng)態(tài)顯示一些精彩的畫(huà)面,實(shí)現商業(yè)價(jià)值或公益宣傳。下面分別進(jìn)行介紹。

(1)信息終端客戶(hù)程序

該信息終端主體界面客戶(hù)程序在MiniGUI服務(wù)器的控制臺程序下打開(kāi),彈出的是信息終端的主菜單,顯示了電話(huà)、信息查詢(xún)、城市交通、新聞專(zhuān)欄等板塊。

程序實(shí)現時(shí),開(kāi)始是包含的頭文件。

MiniGUI圖形包的頭文件有:common.h(MiniGUI常用的宏及數據類(lèi)型的定義)、minigui.h(全局的和通用的接口函數及雜項函數的定義)、window.h(定義了和窗口有關(guān)的宏、數據類(lèi)型、數據結構和窗口函數)。使用GDI函數和控件還需包括gdi.h、control.h兩個(gè)頭文件。

編程實(shí)現時(shí),MiniGUI的程序入口點(diǎn)是MiniGUIMain函數,系統初始化后就會(huì )自動(dòng)找到該函數。在該函數中先設置主窗口一些基本屬性,建立每個(gè)客戶(hù)程序唯一的一個(gè)消息隊列。當程序結束時(shí),調用MainWindow ThreadCleanup函數,清除主窗口所使用的消息隊列系統資源,退回服務(wù)器程序中。

其,各個(gè)功能子函數是在MiniGUI程序的另一主體部分――主界面窗口的過(guò)程函數中調用打開(kāi)的。在主窗口建立時(shí),其中有一項屬性MainWindowProc,即是注明了對應該窗口的過(guò)程函數。各個(gè)功能模塊的消息也都是通過(guò)主窗口中的消息循環(huán)進(jìn)行觸發(fā)的。

窗口過(guò)程函數主體上都是switch和case結構的選擇語(yǔ)句,針對不同的消息產(chǎn)生不同的響應。一般MSG_CREATE消息在窗口生成時(shí)被發(fā)送,因而控件往往在這里調用CreateWindow函數生成。MSG_PAINT則是在移動(dòng)窗口或調用UpdateWindow重繪時(shí)發(fā)生,可根據需要定義相應的操作。MSG_CLOSE即是關(guān)閉窗口時(shí)的動(dòng)作,一般調用DestroyMainWindow銷(xiāo)毀主窗口,調用PostQuitMessage退出消息循環(huán)。

此外,在窗口過(guò)程函數MiniGUI提供的GDI,即圖形設備接口(graphics device interface),可以方便地將BMP、GIF、JPEG等圖片用LoadBitmap函數輸出到界面,并通過(guò)設備上下文(DC)的邏輯字體(logfont)實(shí)現多字體和多字符集支持。

廣告進(jìn)程的制作也類(lèi)似,不再說(shuō)明。

(2)信息終端軟件服務(wù)器程序

因為服務(wù)器和客戶(hù)程序需要交換數據,所以我們使用了經(jīng)MiniGUI包裝過(guò)的Socket通信機制。

在服務(wù)器中,建立一個(gè)監聽(tīng)套接字:

#define LISTEN_SOCKET "/var/tmp/socket1"

static int listen_fd;

BOOL listen_socket(HWND hwnd)

{ if((listen_fd=serv_listen(LISTEN_SOCKET))0)

return FALSH;

return RegisterListenFD(listen_fd,POLLIN,hwnd,NULL);

}

服務(wù)器監聽(tīng)該套接字listen_fd。當客戶(hù)有連接請求時(shí),服務(wù)器的過(guò)程函數中就會(huì )收到MSG_FDEVENT消息,服務(wù)器就可以接受該請求以進(jìn)行相應處理:

static int MainFunProc(HWND hWnd,

{ switch(message)

{case MSG_FDEVENT:

if(LOWORD(wParam)= =listen_fd){

……

conn_fd=serv_accept(listen_fd,uid);

if(conn_fd>0){

sock_read(conn_fd,buff[20],40);

……

sock_write(conn_fd,buff[20],40);

}}

break;

}}

在主界面進(jìn)程中,需要連接到服務(wù)器時(shí),可以通過(guò)cli_conn(LISTEN_SOCKET,'b')來(lái)提出請求。

這樣,服務(wù)器和客戶(hù)程序之間即可相互交流數據了。

廣告進(jìn)程實(shí)現時(shí),需要在服務(wù)器中設置事件鉤子函數SetServerEventHook(my_event_hook)。因為廣告屏保是在沒(méi)有鍵盤(pán)鼠標輸入的一段時(shí)間后自動(dòng)打開(kāi)的,有任意鍵時(shí)又自動(dòng)關(guān)閉,所以只有始終運行在后臺的服務(wù)器才能判斷廣告是否要打開(kāi)關(guān)閉。

可以在消息循環(huán)時(shí)進(jìn)行判斷:

while(GetMessage(Msg,HWND_DESKTOP))

{if (pid_scrnsaver= =0GetTickCount()>

old_tick_count+1000){

ShowCursor(FLASE);

pid_scrnsaver=exec_app("./scrnsaver","crnsaver");

}

DispatchMessage(Msg);

}

dld_tick_count是前一次消息的時(shí)間。當從GetTickCount()得到的當前時(shí)間大于設定值時(shí),還沒(méi)有任何消息的話(huà),廣告屏保scrnsaver程序就啟動(dòng),同時(shí)隱蔽鼠標光標。

當系統又接收到事件時(shí),會(huì )自動(dòng)執行前面注冊過(guò)的事件鉤子函數。在該函數中,使用kill(pid_scrnsaver,SIGINT)命令關(guān)閉廣告程序,并顯示鼠標即可。

軟件系統的示意如圖2所示。

將完成的C語(yǔ)言程序文件用交叉編譯工具編譯,并鏈接MiniGUI庫文件,即可生成所需的可執行文件。

結語(yǔ)

將嵌入式Linux應用至信息家電類(lèi)產(chǎn)品中,并開(kāi)發(fā)出優(yōu)秀的人機交互界面,是嵌入式發(fā)展的趨勢,擁有廣闊的市場(chǎng)前景。本系統開(kāi)發(fā)的嵌入式信息終端也已初見(jiàn)成效,相信這種方案必將得到越來(lái)越多的應用。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>