基于嵌入式系統(tǒng)的圖形界面應(yīng)用設(shè)計(jì)_第1頁(yè)
基于嵌入式系統(tǒng)的圖形界面應(yīng)用設(shè)計(jì)_第2頁(yè)
基于嵌入式系統(tǒng)的圖形界面應(yīng)用設(shè)計(jì)_第3頁(yè)
基于嵌入式系統(tǒng)的圖形界面應(yīng)用設(shè)計(jì)_第4頁(yè)
基于嵌入式系統(tǒng)的圖形界面應(yīng)用設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

隨著手機(jī)等移動(dòng)設(shè)備的廣泛普及以及國(guó)內(nèi)3G推廣在即,屆時(shí)無(wú)線網(wǎng)絡(luò)的速度將明顯提高,這為在移動(dòng)終端上實(shí)現(xiàn)視頻傳播提供了現(xiàn)實(shí)可能,并且由于基于嵌入式的移動(dòng)設(shè)備在市場(chǎng)上的占有率不斷提高并逐漸成為發(fā)展的主流趨勢(shì),有必要對(duì)基于嵌入式移動(dòng)設(shè)備網(wǎng)絡(luò)視頻播放器的實(shí)現(xiàn)方案進(jìn)行研究,并提出一種高效的可行方案。本課題目的是在ARM-Linux嵌入式環(huán)境下實(shí)現(xiàn)網(wǎng)絡(luò)功能,系統(tǒng)主要由硬件層、內(nèi)核層、應(yīng)用層三部分構(gòu)成。為了達(dá)到網(wǎng)路播放的功能,本文通過(guò)對(duì)基于ARM9的up-tech嵌入式開(kāi)發(fā)平臺(tái)硬件以及Mplayer解碼及播放功能的研究提供了一種在嵌入式開(kāi)發(fā)平臺(tái)上實(shí)現(xiàn)網(wǎng)絡(luò)播放的可行方案。本方案在ARM920T硬件結(jié)構(gòu)體系下通過(guò)移植經(jīng)過(guò)裁剪的linux內(nèi)核、根文件系統(tǒng)、Mplayer以及播放器圖形界面。通過(guò)整合硬件層、內(nèi)核層以及應(yīng)用程,在嵌入式環(huán)境下利用FTP傳輸協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)播放功能。本項(xiàng)目最后已在宿主機(jī)中實(shí)現(xiàn)網(wǎng)絡(luò)播放功能,但在嵌入式開(kāi)發(fā)平臺(tái)中運(yùn)行時(shí)仍有不足之處,需要進(jìn)一步完善。通過(guò)這一課題的研究了解移動(dòng)設(shè)備網(wǎng)絡(luò)視頻播放器的實(shí)現(xiàn)主要技術(shù),并提供一款低成本、實(shí)用性高的無(wú)線網(wǎng)絡(luò)視頻播放器,這對(duì)嵌入式移動(dòng)設(shè)備領(lǐng)域的研究來(lái)說(shuō)具有重要意義。隨著嵌入式系統(tǒng)應(yīng)用的逐漸普及,為保證嵌入式系統(tǒng)的順利運(yùn)行,嵌入式軟件得到了快速發(fā)展,成為軟件業(yè)的一股新生力量。嵌入式軟件與嵌入式系統(tǒng)是密不可分的,嵌入式系統(tǒng)是“控制、監(jiān)視或者輔助設(shè)備、機(jī)器和車(chē)間運(yùn)行的裝置”,就是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。它一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶(hù)的應(yīng)用程序等四個(gè)部分組成,用于實(shí)現(xiàn)對(duì)其他設(shè)備的控制、監(jiān)視或管理等功能。而嵌入式軟件就是基于嵌入式系統(tǒng)設(shè)計(jì)的軟件,它也是計(jì)算機(jī)軟件的一種,同樣由程序及其文檔組成,可細(xì)分成系統(tǒng)軟件、支撐軟件、應(yīng)用軟件三類(lèi),是嵌入式系統(tǒng)的重要組成部分。隨著信息技術(shù)以及互聯(lián)網(wǎng)飛速發(fā)展普及,3C(計(jì)算機(jī)、通訊、消費(fèi)電子)合一的加速,嵌入式設(shè)計(jì)已經(jīng)成為工業(yè)現(xiàn)代化、智能化的必經(jīng)之路,嵌入式產(chǎn)品已經(jīng)深入到各行各業(yè)。嵌入式接入設(shè)備是數(shù)字化時(shí)代的一大主流產(chǎn)品,嵌入式軟件已經(jīng)成為數(shù)字化產(chǎn)品的核心。嵌入式軟件大量應(yīng)用于家用市場(chǎng)、工業(yè)市場(chǎng)、商業(yè)市場(chǎng)、通訊市場(chǎng)和國(guó)防市場(chǎng)。近幾年來(lái),信息電器迅速發(fā)展,也為嵌入式軟件的發(fā)展起到推波助瀾的作用。彩電、DCD、手機(jī)、MP3/MP4、掌上電腦、汽車(chē)等都是潛在的信息電器。信息電器平臺(tái)與通用操作系統(tǒng)、數(shù)據(jù)庫(kù)不同,不存在國(guó)外軟件廠商壟斷市場(chǎng)的現(xiàn)象,這一領(lǐng)域已成為中國(guó)軟件業(yè)的突破口。隨著Linux操作系統(tǒng)本身的不斷完善,嵌入式Linux已經(jīng)廣泛應(yīng)用到手機(jī)、PDA以及其他移動(dòng)終端產(chǎn)品中。嵌入式Linux以其開(kāi)放的源碼,良好的適應(yīng)性,較低的成本和很好的技術(shù)移植在手機(jī)等移動(dòng)終端產(chǎn)品的操作系統(tǒng)領(lǐng)域,獲得了越來(lái)越多的青睞。移動(dòng)終端簡(jiǎn)介移動(dòng)終端或者叫移動(dòng)通信終端是指可以在移動(dòng)中使用的計(jì)算機(jī)設(shè)備,廣義的講包括手機(jī)、筆記本、POS機(jī)甚至包括車(chē)載電腦。但是大部分情況下是指手機(jī)或者具有多種應(yīng)用功能的智能手機(jī)。隨著網(wǎng)絡(luò)和技術(shù)朝著越來(lái)越寬帶化的方向的發(fā)展,移動(dòng)通信產(chǎn)業(yè)將走向真正的移動(dòng)信息時(shí)代。另一方面,隨著集成電路技術(shù)的飛速發(fā)展,移動(dòng)終端的處理能力已經(jīng)擁有了強(qiáng)大的處理能力,移動(dòng)終端正在從簡(jiǎn)單的通話工具變?yōu)橐粋€(gè)綜合信息處理平臺(tái)。這也給移動(dòng)終端增加了更加寬廣的發(fā)展空間?,F(xiàn)代的移動(dòng)終端已經(jīng)擁有極為強(qiáng)大的處理能力(CPU主頻已經(jīng)接近1G)、內(nèi)存、固化存儲(chǔ)介質(zhì)以及像電腦一樣的操作系統(tǒng)。是一個(gè)完整的超小型計(jì)算機(jī)系統(tǒng)??梢酝瓿蓮?fù)雜的處理任務(wù)。移動(dòng)終端也擁有非常豐富的通信方式,即可以通過(guò)GSM,CDMA,EDGE,3G等無(wú)線運(yùn)營(yíng)網(wǎng)通訊,也可以通過(guò)無(wú)線局域網(wǎng),藍(lán)牙和紅外進(jìn)行通信。隨著移動(dòng)終端硬件技術(shù)的發(fā)展以及3G網(wǎng)絡(luò)建成使得通訊速率的提高。今天的移動(dòng)終端不僅可以通話,拍照、聽(tīng)音樂(lè)、玩游戲,而且可以在線播放電視及點(diǎn)播電影、上傳及下載多媒體信息,成為移動(dòng)辦公和移動(dòng)商務(wù)的重要工具。在移動(dòng)終端發(fā)展史中,隨著通信技術(shù)的發(fā)展,具有不同功能的應(yīng)用軟件可以運(yùn)行在移動(dòng)終端上為人們提供各種各樣的服務(wù),但是沒(méi)有統(tǒng)一的系統(tǒng)結(jié)構(gòu)框架使得這些應(yīng)用軟件的互動(dòng)性非常差。于是移動(dòng)終端產(chǎn)商們便開(kāi)始尋求一種基于“開(kāi)放”的操作系統(tǒng)的手機(jī),所謂“開(kāi)放”指其所有的API(應(yīng)用程序接口)應(yīng)該是公開(kāi)并且受到廣泛支持。當(dāng)時(shí)所面臨的選擇有Symbian的EPOC平臺(tái),Palm/OS以及微軟的WINCE。隨著研究的深入,Linux的嵌入式版本開(kāi)始受到青睞并擴(kuò)展其市場(chǎng)。從2001年至2002年,嵌入式Linux在嵌入式操作系統(tǒng)的市場(chǎng)份額迅速增長(zhǎng)了一倍左右,從而成為嵌入式OS中的重要一員。嵌入式Linux在移動(dòng)終端中有如此中大作用得益于其如下優(yōu)勢(shì):(1)Linux屬于開(kāi)放的操作系統(tǒng),它自身的技術(shù)文檔甚至源代碼都是開(kāi)放的,因而在學(xué)術(shù)領(lǐng)域受到格外青睞,使得它對(duì)新技術(shù),新協(xié)議有良好的適應(yīng)性.(2)由于Linux和Unix之間的相似性,使得許多對(duì)Unix熟悉的開(kāi)發(fā)人員能夠很快在相似的基于嵌入式Linux開(kāi)發(fā)環(huán)境中進(jìn)行開(kāi)發(fā)工作。另外,由于Linux源碼的開(kāi)放性使得代碼移植和重用變得相當(dāng)普遍,基于嵌入式Linux平臺(tái)的開(kāi)發(fā)產(chǎn)品往往只花費(fèi)較低的成本就能有很好的質(zhì)量。這對(duì)于注重開(kāi)發(fā)成本的公司無(wú)疑具有極大的誘惑力。(3)Linux提供了良好的安全性能和并行處理能力。Java語(yǔ)言在移動(dòng)領(lǐng)域正逐漸成為主流的開(kāi)發(fā)語(yǔ)言,而實(shí)驗(yàn)表明,在相同的硬件平臺(tái)上,Java虛擬機(jī)在Linux上能取得比WindowsCE上更好的性能值。因此Java+Linux成為現(xiàn)在的時(shí)尚搭配。當(dāng)然,Linux在價(jià)格上的優(yōu)勢(shì)也很關(guān)鍵。盡管Linux并非全免費(fèi),但和其他商用操作系統(tǒng)相比,它還是占盡價(jià)格優(yōu)勢(shì)。硬件平臺(tái)及開(kāi)發(fā)流程本課題采用的硬件開(kāi)發(fā)平臺(tái)為由北京博創(chuàng)興業(yè)科技有限公司開(kāi)發(fā)的基于ARM體系結(jié)構(gòu)的UP-CUP2410-S平臺(tái)。UP-CUP2410-S平臺(tái)的CPU為ARM920T內(nèi)核的三星S3C2410芯片,由于有MMU可以運(yùn)行標(biāo)準(zhǔn)的ARM-LINUX內(nèi)核。除此之外UP-CUP2410-S開(kāi)發(fā)平臺(tái)帶有豐富的外圍開(kāi)發(fā)部件和完善的開(kāi)發(fā)手冊(cè),使得這一開(kāi)發(fā)平臺(tái)非常適合嵌入式教學(xué)和進(jìn)行嵌入式軟件開(kāi)發(fā)。圖2-1UP-TECH2410嵌入式開(kāi)發(fā)板開(kāi)發(fā)平臺(tái)硬件配置UP-TECHS2410/P270DVP的硬件配置如表2-1-2所示表2-1-2UP-TECHS2410/P270DVP的硬件配置[4]配置名稱(chēng)型號(hào)說(shuō)明CPUARM920T結(jié)構(gòu)芯片三星S3c2410X工作頻率203MHzFLASHSAMSUNGK9F120864MNANDSDRAMHY57V561620AT-H32M×2=64MEtherNet網(wǎng)卡DM9000AE10/100M自適應(yīng)LCDLQ080V3DG018寸16bitTFT觸摸屏SX-080-W4R-FBFM7843驅(qū)動(dòng)USB接口4個(gè)HOST/1個(gè)DEVICE由AT43301構(gòu)成USBHUBUART/IrDA2個(gè)RS232,1個(gè)RS485,1個(gè)IrDAAD8路10位內(nèi)部AD控制器3個(gè)電位器控制輸入AUDIOIIS總線,UDA1341芯片音頻擴(kuò)展卡插槽168PinEXPORT總線直接擴(kuò)展GPS_GPRS擴(kuò)展板SIMCOMSIM300GPRS模塊,Trimble’SGPS支持雙道語(yǔ)音通信IDE/CF卡插座筆記本硬盤(pán),CF卡PS2PC鍵盤(pán)和鼠標(biāo)由ATMEGA8單片機(jī)控制IC卡座AT24CXX系列由ATMEGA8單片機(jī)控制LED8x8矩陣LED及2個(gè)LED數(shù)碼管由總線控制VGAVga輸出中斷鍵1個(gè)ENT控制LED由3個(gè)IO口控制DC電機(jī)由PWM控制閉環(huán)測(cè)速功能CANBUS由MCP2510和TJA1050構(gòu)成DoubleDAMAX504一個(gè)10位DAC端口調(diào)試接口板載JTAG,直接支持下載與仿真25針2.1.2網(wǎng)絡(luò)播放器硬件架構(gòu)本課題的硬件框架如圖2-1-3所示。SS3C2410核心板CPUSDRAMFLASH640*480TFT16bitLCD液晶屏VGA/AV轉(zhuǎn)換總線隔離、附屬電路USBDevice接口DM9000AE100M網(wǎng)卡RS232串口0揚(yáng)聲器電源、復(fù)位邏輯圖2-1-3硬件架構(gòu)網(wǎng)絡(luò)播放器開(kāi)發(fā)過(guò)程簡(jiǎn)介為了在嵌入式開(kāi)發(fā)平臺(tái)上實(shí)現(xiàn)網(wǎng)絡(luò)播放器,首先需要在宿主機(jī)的linux系統(tǒng)下用QT完成播放器界面程序的編寫(xiě)以及Mplayer的安裝,并且利用編寫(xiě)好的界面程序調(diào)用Mplayer實(shí)現(xiàn)視頻及音頻文件的本地播放以及在FTP協(xié)議下得網(wǎng)絡(luò)播放。在確認(rèn)應(yīng)用程序能夠正確運(yùn)行后利用交叉編譯工具鏈將應(yīng)用程序交叉編譯,這一部分分為用戶(hù)界面程序的交叉編譯以及Mplayer的交叉編譯。交叉編譯完成后利用NFS文件系統(tǒng)將編譯好的應(yīng)用程序及動(dòng)態(tài)庫(kù)掛載至開(kāi)發(fā)板上,如此便可以利用linux系統(tǒng)下得minicom和開(kāi)發(fā)板通訊并運(yùn)行掛載文件夾下的網(wǎng)絡(luò)播放器,查看運(yùn)行結(jié)果。UUp-tech2410網(wǎng)卡串口USBNFS核心CPU搭建宿主機(jī)開(kāi)發(fā)環(huán)境這一部分包括linux系統(tǒng)的安裝、交叉編譯器安裝、minicom的配置、NFS網(wǎng)絡(luò)文件系統(tǒng)的配置。linux系統(tǒng)的安裝:linux是采用GPL協(xié)議的GNU系統(tǒng),它的源代碼是公開(kāi)的?;谶@一優(yōu)點(diǎn),眾多公司或組織在linux內(nèi)核源代碼的基礎(chǔ)上進(jìn)行了一些必要的修改加工,然后再開(kāi)發(fā)一些配套的軟件,并把它整合成一個(gè)自己的發(fā)布版linux。除去非商業(yè)組織Debian開(kāi)發(fā)的DiebianGNU/Linux外,美國(guó)的RedHat公司發(fā)行了RedHatlinux,法國(guó)的Mandrake公司發(fā)行了Mandrakelinux,德國(guó)的SUSE公司發(fā)行了SUSElinux,國(guó)內(nèi)眾多公司也發(fā)行了中文版得linux,如著名的紅旗linux。Linux目前已經(jīng)有超過(guò)250個(gè)發(fā)行版本。本課題采用的linux系統(tǒng)是RedHat9.0,詳細(xì)安裝過(guò)程參見(jiàn)交叉編譯器安裝:嵌入式軟件開(kāi)發(fā)所采用的編譯為交叉編譯。所謂交叉編譯就是在一個(gè)平臺(tái)上生成可以在另一個(gè)平臺(tái)上執(zhí)行的代碼。編譯的最主要工作就在將程序轉(zhuǎn)化成運(yùn)行該程序的CPU所能識(shí)別的機(jī)器代碼,由于不同的體系結(jié)構(gòu)有不同的指令系統(tǒng)。因此,不同的CPU需要有相應(yīng)的編譯器,而交叉編譯就如同翻譯一樣,把相同的程序代碼翻譯成不同的CPU語(yǔ)言。UUp-tech2410本課題采用的交叉編譯器為arm-linux-gcc-,將開(kāi)發(fā)板配套光盤(pán)上的.tar.bz2解壓至根目錄/opt文件夾下。解壓完畢后修改/root/.bashrc文件。命令為#vi/root/.bashrc在文件最后加上exportPATH=$PATH:/opt/arm-linux-gcc-/bin修改完畢以后在終端輸入命令#source/root/.bashrc使修改生效minicom配置:由于在嵌入式開(kāi)發(fā)過(guò)程中需要將開(kāi)發(fā)板上的信息顯示給開(kāi)發(fā)人員,所以要有一種能夠顯示開(kāi)發(fā)板上信息的解決方法。最常用的就是通過(guò)串口線輸出到宿主機(jī)的顯示器上,這樣,開(kāi)發(fā)人員就可以看到系統(tǒng)的運(yùn)行情況了。在windows和linux中都有不少串口通信軟件,可以很方便地對(duì)串口進(jìn)行配置,其中最主要的配置參數(shù)就是波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位和數(shù)據(jù)流控制位等,但是它們一定要根據(jù)實(shí)際情況進(jìn)行相應(yīng)配置。Minicom是linux下串口通信的軟件,它的使用完全依靠鍵盤(pán)的操作,具有高效與便利等優(yōu)點(diǎn)。Minicom詳細(xì)配置參見(jiàn)Minicom詳細(xì)命令參見(jiàn)NFS網(wǎng)絡(luò)文件系統(tǒng)配置:NFS為NetworkFileSystem的簡(jiǎn)稱(chēng),最早是由Sun公司提出發(fā)展起來(lái)的,其目的就是讓不同的機(jī)器、不同的操作系統(tǒng)之間可以彼此共享文件。NFS可以讓不同的主機(jī)通過(guò)網(wǎng)絡(luò)將遠(yuǎn)端的NFS服務(wù)器共享出來(lái)的文件安裝到自己達(dá)到系統(tǒng)中,從客戶(hù)端看來(lái),使用NFS的遠(yuǎn)端文件就像是使用本地文件一樣。在嵌入式中使用NFS會(huì)使應(yīng)用程序的開(kāi)發(fā)變得十分方便,并且不用反復(fù)地進(jìn)行燒寫(xiě)鏡像文件。NFS的使用分為服務(wù)端和客戶(hù)端,其中服務(wù)端是提供要共享的文件,而客戶(hù)端則通過(guò)掛載“mount”這一動(dòng)作來(lái)實(shí)現(xiàn)對(duì)共享文件的訪問(wèn)操作。NFS服務(wù)器端是通過(guò)讀入它的配置文件“/etc/exports”來(lái)決定所共享的文件目錄。在這個(gè)配置文件中,每一行都代表一項(xiàng)要共享的文件目錄以及所指定的客戶(hù)端對(duì)其操作權(quán)限。客戶(hù)端可以根據(jù)相應(yīng)的權(quán)限,對(duì)該目錄下的所有目錄文件進(jìn)行訪問(wèn)。配置文件中每一行的格式如下:[共享的目錄](méi)[主機(jī)名稱(chēng)或IP][參數(shù)1,參數(shù)2,···]主機(jī)名稱(chēng)或IP是可供共享的客戶(hù)端主機(jī)或IP,若對(duì)所有的IP都可以訪問(wèn),則可用“*”表示。選項(xiàng)參數(shù)含義rw可讀寫(xiě)的權(quán)限r(nóng)o只讀的權(quán)限no_root_squashNFS客戶(hù)端分享目錄使用者的權(quán)限,即如果客戶(hù)端使用的是root用戶(hù),那么對(duì)于這個(gè)共享目錄而言,該客戶(hù)端就具有root權(quán)限sync資料同步寫(xiě)入到內(nèi)存與硬盤(pán)當(dāng)中async資料會(huì)先暫存于內(nèi)存當(dāng)中,而非直接寫(xiě)入硬盤(pán)例:/root/arm2410cl*(rw,no_root_squash)在設(shè)定完配置文件之后,需要啟動(dòng)nfs服務(wù)和portmap服務(wù),這里的portmap服務(wù)時(shí)允許NFS客戶(hù)端查看NFS服務(wù)在用的端口,在它被激活之后,就會(huì)出現(xiàn)一個(gè)端口為111的sumRPC(遠(yuǎn)端過(guò)程調(diào)用)的服務(wù)。這是NFS服務(wù)中必須實(shí)現(xiàn)的一項(xiàng),因此,必須把它開(kāi)啟:命令為:#serviceportmapstart啟動(dòng)nfs服務(wù):#servicenfsstart詳細(xì)內(nèi)容參見(jiàn)建立引導(dǎo)加載程序(BootLoader)簡(jiǎn)單地說(shuō),Bootloader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段程序,它類(lèi)似于PC機(jī)中的BIOS程序。通過(guò)這段程序,可以完成硬件設(shè)備的初始化,并建立內(nèi)存空間的映射圖的功能,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),為最終調(diào)用系統(tǒng)內(nèi)核做好準(zhǔn)備。一般用戶(hù)可以從網(wǎng)絡(luò)上下載一些公開(kāi)源代碼的Bootloader程序,如U-Boot、BLOB、VIVI、LILO、ARM-Boot、RedBoot等,然后根據(jù)自己的芯片進(jìn)行移植修改。本課題采用的bootloader是博創(chuàng)公司提供的VIVI,因?yàn)橐龑?dǎo)程序是應(yīng)該最先被燒寫(xiě)到開(kāi)發(fā)板上的程序,所以需要特殊的燒寫(xiě)工具,本課題的燒寫(xiě)工具由博創(chuàng)科技公司提供,燒寫(xiě)方法參見(jiàn)。成功燒寫(xiě)bootloader后可利用VIVI進(jìn)行內(nèi)核、根文件系統(tǒng)以及應(yīng)用程序的燒寫(xiě)。內(nèi)核編譯與移植一個(gè)完整的嵌入式操作系統(tǒng)必須要有與硬件匹配的內(nèi)核,一般的做法是下載別人已經(jīng)一直好的linux操作系統(tǒng)。下載后根據(jù)自己的系統(tǒng)要求進(jìn)行裁減、配置,再添加自己的特定硬件的驅(qū)動(dòng)程序進(jìn)行調(diào)試修改,最終得到一個(gè)適合于自己平臺(tái)的內(nèi)核,將其進(jìn)行交叉編譯,就可以得到符合要求的內(nèi)核映像文件,最后將其下載到flash存儲(chǔ)器芯片的相應(yīng)分區(qū)中運(yùn)行。本課題由于未采用新的硬件電路,所以不需要重新編譯linux內(nèi)核,可以直接使用博創(chuàng)公司提供編譯好的內(nèi)核,詳細(xì)的內(nèi)核編譯方法亦可參考博創(chuàng)平臺(tái)配套資料。建立根文件系統(tǒng)Linux的一個(gè)最重要特點(diǎn)就是它支持許多不同的文件系統(tǒng)。這使Linux非常靈活,能夠與許多其他的操作系統(tǒng)共存。Linux支持的常見(jiàn)的文件系統(tǒng)有:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。除了內(nèi)核外,要使嵌入式系統(tǒng)正常運(yùn)行還需要建立根文件系統(tǒng)。在嵌入式系統(tǒng)中,有一個(gè)非常重要的創(chuàng)建根文件系統(tǒng)的工具—BusyBox,它能產(chǎn)生一個(gè)最基本的根文件系統(tǒng)。有了這個(gè)最基本得根文件系統(tǒng),再根據(jù)自己的需要添加其他文件,即可構(gòu)成一個(gè)完整的根文件系統(tǒng)。根文件系統(tǒng)在嵌入式系統(tǒng)中一般設(shè)為只讀,需要使用mkcramfs、genromfs等工具產(chǎn)生燒寫(xiě)映像文件,并將其燒寫(xiě)到FLASH芯片的相應(yīng)分區(qū)中運(yùn)行。本課題使用的文件系統(tǒng)為cramfs。在嵌入式的環(huán)境之下,內(nèi)存和外存資源都需要節(jié)約使用。如果使用RAMDISK方式來(lái)使用文件系統(tǒng),那么在系統(tǒng)運(yùn)行之后,首先要把外存(Flash)上的映像文件解壓縮到內(nèi)存中,構(gòu)造起RAMDISK環(huán)境,才可以開(kāi)始運(yùn)行程序。但是它也有很致命的弱點(diǎn)。在正常情況下,同樣的代碼不僅在外存中占據(jù)了空間(以壓縮后的形式存在),而且還在內(nèi)存中占用了更大的空間(以解壓縮之后的形式存在),這違背了嵌入式環(huán)境下盡量節(jié)省資源的要求。使用cramfs就是一種解決這個(gè)問(wèn)題的方式。cramfs是一個(gè)壓縮式的文件系統(tǒng),它并不需要一次性地將文件系統(tǒng)中的所有內(nèi)容都解壓縮到內(nèi)存之中,而只是在系統(tǒng)需要訪問(wèn)某個(gè)位置的數(shù)據(jù)的時(shí)侯,馬上計(jì)算出該數(shù)據(jù)在cramfs中的位置,將其實(shí)時(shí)地解壓縮到內(nèi)存之中,然后通過(guò)對(duì)內(nèi)存的訪問(wèn)來(lái)獲取文件系統(tǒng)中需要讀取的數(shù)據(jù)。cramfs中的解壓縮以及解壓縮之后的內(nèi)存中數(shù)據(jù)存放位置都是由cramfs文件系統(tǒng)本身進(jìn)行維護(hù)的,用戶(hù)并不需要了解具體的實(shí)現(xiàn)過(guò)程,因此這種方式增強(qiáng)了透明度,對(duì)開(kāi)發(fā)人員來(lái)說(shuō),既方便,又節(jié)省了存儲(chǔ)空間。網(wǎng)絡(luò)協(xié)議FTP是FileTransferProtocol(文件傳輸協(xié)議)的簡(jiǎn)稱(chēng),它是目前應(yīng)用最廣泛的協(xié)議之一,用于設(shè)備間的文件傳送。眾所周知,Internet是一個(gè)非常復(fù)雜的計(jì)算機(jī)環(huán)境,有PC,有工作站,有MAC,有大型機(jī),而且在龐大的計(jì)算機(jī)網(wǎng)絡(luò)中連接互聯(lián)網(wǎng)的各計(jì)算機(jī)終端上安裝著不同的計(jì)算機(jī)系統(tǒng)。為了解決不同機(jī)器與操作系統(tǒng)中的文件傳輸問(wèn)題,必須要有一個(gè)統(tǒng)一的協(xié)議,F(xiàn)TP(文件傳輸協(xié)議)由此應(yīng)運(yùn)而生。由于FTP協(xié)議是工作在TCP/IP協(xié)議體系結(jié)構(gòu)上的應(yīng)用層協(xié)議,所以有必要對(duì)TCP/IP協(xié)議進(jìn)行簡(jiǎn)要介紹。3.1TCP/IP體系結(jié)構(gòu)TCP/IP體系模型是計(jì)算機(jī)網(wǎng)絡(luò)的事實(shí)標(biāo)準(zhǔn)。通過(guò)它可以實(shí)現(xiàn)各種異構(gòu)網(wǎng)絡(luò)或異種機(jī)之間的互聯(lián)通信。圖3-2-1為T(mén)CP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)示意圖,該體系結(jié)構(gòu)有四層。其應(yīng)用層程序可直接運(yùn)行于傳輸層之上,傳輸層提供兩種基本類(lèi)型的服務(wù):傳輸控制協(xié)議(TransferControlProtocol,TCP),為字節(jié)流提供面向連接的可靠傳輸;用戶(hù)數(shù)據(jù)包協(xié)議(UserDatagramProtocol,UDP),為各個(gè)消息提供盡力而為的無(wú)連接傳輸。應(yīng)用層應(yīng)用層傳輸層互聯(lián)網(wǎng)層網(wǎng)絡(luò)接口層圖3-2-1網(wǎng)絡(luò)接口層網(wǎng)絡(luò)接口層是TCP/IP的最底層,該層得協(xié)議提供了一種數(shù)據(jù)傳送的方法,是將數(shù)據(jù)分幀來(lái)傳送,因此必須知道低層網(wǎng)絡(luò)的細(xì)節(jié),以便準(zhǔn)確地格式化傳送的數(shù)據(jù),該層執(zhí)行的功能還包括將IP地址映射為網(wǎng)絡(luò)使用的物理地址。互聯(lián)網(wǎng)層(IP)互聯(lián)網(wǎng)層的主要功能是負(fù)責(zé)將數(shù)據(jù)報(bào)送到目的主機(jī),包括:處理來(lái)自傳輸層的分組發(fā)送請(qǐng)求,將分組裝入IP數(shù)據(jù)報(bào),選擇路徑,然后將數(shù)據(jù)報(bào)發(fā)送到相應(yīng)數(shù)據(jù)線上。處理接收的數(shù)據(jù)報(bào),檢查目的地址若需要轉(zhuǎn)發(fā),則選擇發(fā)送路徑轉(zhuǎn)發(fā),若目的地址為本節(jié)點(diǎn)地址,則除去報(bào)頭,將分組交送傳輸層處理。處理互聯(lián)網(wǎng)路徑、流控與擁塞問(wèn)題。傳輸層傳輸層主要功能是負(fù)責(zé)應(yīng)用程序之間的端-端通信。該層中的兩個(gè)最主要協(xié)議是TCP協(xié)議和UDP協(xié)議。TCP協(xié)議是一種可靠的面向連接的協(xié)議,它允許將一臺(tái)主機(jī)的字節(jié)流無(wú)差錯(cuò)地傳送到目的主機(jī)。TCP同時(shí)要完成流量控制功能,協(xié)調(diào)收發(fā)雙方的發(fā)送與接收速度,達(dá)到正確傳輸目的。UDP協(xié)議提供的無(wú)連接報(bào)文傳送沒(méi)有差錯(cuò)恢復(fù)或流量控制機(jī)制,分組傳輸順序檢查與排序由應(yīng)用層實(shí)現(xiàn)。UDP一般用于要求速度快但不一定要求可靠的傳輸場(chǎng)合。應(yīng)用層應(yīng)用層是TCP/IP協(xié)議族的最高層,它規(guī)定了應(yīng)用程序怎樣使用互聯(lián)網(wǎng)。它包括遠(yuǎn)程登錄協(xié)議(TELecommunicationNETwork,TELNET)、文件傳輸協(xié)議(FileTransferProtocol,FTP)、電子郵件協(xié)議(SimpleMailTransferProtocol,SMTP)、域名服務(wù)協(xié)議(DomainNameSystem,DNS)及超文本傳送協(xié)議(HypertextTransferProtocol,HTTP)等。TCP之所以是可靠的面向連接的協(xié)議,是因?yàn)門(mén)CP在IP的基礎(chǔ)上提供可靠的面向連接的流服務(wù)。為了能夠做到這點(diǎn),TCP使用了選擇性重發(fā)(AutomaticRepeatrequest,ARQ)技術(shù)。此外,TCP也使用算法進(jìn)行擁塞控制,這種算法可以通過(guò)分組丟失來(lái)標(biāo)識(shí)擁塞,并且能通過(guò)擁塞窗口控制信息進(jìn)入網(wǎng)絡(luò)內(nèi)速度。TCP的可靠流服務(wù)在互聯(lián)網(wǎng)上兩個(gè)應(yīng)用的進(jìn)程之間,TCP提供了邏輯上的全雙工連接。TCP向這些應(yīng)用進(jìn)程提供面向連接的、可靠而有序的字節(jié)流服務(wù)。TCP還提供流量控制,允許接受端控制發(fā)送端傳輸信息的速率,從而使得緩沖區(qū)不會(huì)溢出。TCP還能支持同一個(gè)終端系統(tǒng)上的多個(gè)應(yīng)用程序。在數(shù)據(jù)傳送開(kāi)始之前,TCP在兩個(gè)應(yīng)用進(jìn)程之間建立連接,也就是在協(xié)議中設(shè)置所要用到的變量。這些變量存儲(chǔ)在一個(gè)稱(chēng)為傳輸控制數(shù)據(jù)塊的連接記錄中。一旦連接建立,TCP就在連接中正確而有序地雙向傳送數(shù)據(jù)。TCP設(shè)計(jì)成在IP層得基礎(chǔ)上工作,所以它并不假設(shè)低層的網(wǎng)絡(luò)服務(wù)是可靠的。為了能夠?qū)崿F(xiàn)可靠性,TCP使用選擇性重發(fā)。TCP獨(dú)立地結(jié)束每個(gè)方向上的傳輸,允許一個(gè)方向上的連接被關(guān)閉之后另外一個(gè)方向仍然傳輸數(shù)據(jù)。除此之外,TCP不保持消息的邊界,它把從應(yīng)用層得到的數(shù)據(jù)當(dāng)做字節(jié)流看待。也就是說(shuō),TCP可以按照它認(rèn)為最適合低層網(wǎng)絡(luò)傳輸?shù)姆绞诫S意分裂和重組應(yīng)用的信息。TCP協(xié)議TCP數(shù)據(jù)段TCP數(shù)據(jù)段得格式如圖---所示,其報(bào)頭由一個(gè)20字節(jié)的固定部分和一個(gè)變長(zhǎng)的可選字段組成。連接的建立在發(fā)送數(shù)據(jù)之前,必須首先建立一個(gè)連接。TCP使用三次握手過(guò)程來(lái)建立連接,如圖—所示,握手步驟如下:請(qǐng)求端(通常稱(chēng)為客戶(hù))發(fā)送一個(gè)SYN報(bào)文段(SYN為1)指明客戶(hù)打算連接的服務(wù)器的端口,以及初始順序號(hào)(ISN)。服務(wù)器發(fā)回包含服務(wù)器的初始順序號(hào)的SYN報(bào)文段(SYN為1)作為應(yīng)答。同時(shí),將確認(rèn)號(hào)設(shè)置為客戶(hù)的ISN加1以對(duì)客戶(hù)的SYN報(bào)文段進(jìn)行確認(rèn)(ACK也為1)??蛻?hù)必須將確認(rèn)號(hào)設(shè)置為服務(wù)器的ISN加1以對(duì)服務(wù)器的SYN報(bào)文段進(jìn)行確認(rèn)(ACK為1),該報(bào)文通知目的主機(jī)雙方已完成連接建立。TCP連接終止TCP連接建立起來(lái)后,就可以在兩個(gè)方向傳送數(shù)據(jù)流。當(dāng)TCP的應(yīng)用進(jìn)程再?zèng)]有數(shù)據(jù)需要發(fā)送時(shí),就發(fā)關(guān)閉命令。TCP通過(guò)發(fā)送控制位FIN=1的數(shù)據(jù)片來(lái)關(guān)閉本方數(shù)據(jù)流,但還可以繼續(xù)接收數(shù)據(jù),直到對(duì)方關(guān)閉那個(gè)方向的數(shù)據(jù)流,連接就關(guān)閉。TCP協(xié)議使用修改的三次握手協(xié)議來(lái)關(guān)閉連接,如圖3-11所示,即終止一個(gè)連接要經(jīng)過(guò)4次握手。這是因?yàn)門(mén)CP的半關(guān)閉(half-close)造成的。由于一個(gè)TCP連接是全雙工(即數(shù)據(jù)在兩個(gè)方向上能同時(shí)傳遞),因此每個(gè)方向必須單獨(dú)地進(jìn)行關(guān)閉。關(guān)閉的原則就是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN來(lái)終止這個(gè)方向連接。當(dāng)一端收到一個(gè)FIN,它必須通知應(yīng)用層另一端已經(jīng)終止了那個(gè)方向的數(shù)據(jù)傳送。3.3文件傳送協(xié)議FTP文件傳送協(xié)議(FTP)是目前應(yīng)用最廣泛的協(xié)議之一,用于在設(shè)備間的文件傳送。FTP提供交互式訪問(wèn),允許客戶(hù)指明文件的類(lèi)型與格式,并允許文件具有存取權(quán)限。它可工作于不同主機(jī),甚至那些運(yùn)行不同的操作系統(tǒng)或具有不同的文件結(jié)構(gòu)的主機(jī)均可使用。為傳送文件,F(xiàn)TP需要兩條TCP連接,一條是控制連接,在服務(wù)器的21端口上建立;另一條是數(shù)據(jù)連接,用于進(jìn)行文件傳送。每個(gè)文件傳送均必須建立數(shù)據(jù)連接,數(shù)據(jù)連接可用于向任何方向傳送文件,或者由客戶(hù)從服務(wù)器上獲取文件和目錄清單。圖---說(shuō)明了FTP中兩條連接各自的作用。用戶(hù)協(xié)議解釋器(ProtocolInterpreter,PI)的作用是發(fā)送FTP命令與解釋回復(fù)。服務(wù)器協(xié)議解釋器(服務(wù)器PI)用于解釋FTP命令與發(fā)送相應(yīng)信息,以及指示服務(wù)器數(shù)據(jù)傳送進(jìn)程(DataTransferProcess,DTP)建立數(shù)據(jù)連接與進(jìn)行傳送。DI:協(xié)議接收器DI:協(xié)議接收器DTP:數(shù)據(jù)傳送進(jìn)程服務(wù)器PI服務(wù)器DTP用戶(hù)接口用戶(hù)網(wǎng)用戶(hù)DTP服務(wù)器FTP用戶(hù)FTP開(kāi)發(fā)環(huán)境及Mplayer通常嵌入式軟件的開(kāi)發(fā)環(huán)境為宿主機(jī)加嵌入式開(kāi)發(fā)平臺(tái),參照第二章可以完成宿主機(jī)得配置,這一章著重介紹用戶(hù)界面設(shè)計(jì)工具QT、集成開(kāi)發(fā)環(huán)境Qtcreator及萬(wàn)能播放器Mplayer。4.1用戶(hù)界面設(shè)計(jì)工具QTQt是挪威Trolltech公司出品的一個(gè)跨平臺(tái)的C++用戶(hù)界面庫(kù)。它提供給應(yīng)用程序開(kāi)發(fā)者建立藝術(shù)級(jí)的圖形用戶(hù)界面所需的所用功能。Qt是完全面向?qū)ο蟮模苋菀讛U(kuò)展,并且允許真正地組件編程。QT同XWindow上的Motif,Openwin,GTK等圖形界面庫(kù)和Windows平臺(tái)上的MFC,OWL,VCL,ATL是同類(lèi)型的東西,4.QT(1)優(yōu)良的跨平臺(tái)特性QT支持下列操作系統(tǒng):MicrosoftWindows95/98,MicrosoftWindowsNT,Linux,Solaris,SunOS,HP-UX,DigitalUNIX(OSF/1,Tru64),Irix,F(xiàn)reeBSD,BSD/OS,SCO,AIX,OS390,QNX等等。Qt可在多種體系結(jié)構(gòu)的微處理器上移植,如MIPS、ARM、StrongARM、Motorola68000、PowerPC和Xscale等支持FrameBuffer的嵌入式處理器。(2)面向?qū)ο驫T的良好封裝機(jī)制使得QT的模塊化程度非常高,軟件構(gòu)件或元素可重用性好,支持組件編程,對(duì)于用戶(hù)開(kāi)發(fā)來(lái)說(shuō)是非常方便的。QT提供了一種稱(chēng)為signals/slots的安全類(lèi)型來(lái)替代callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡(jiǎn)單。(3)豐富的APIQT包括多達(dá)250個(gè)以上的C++類(lèi),還提供基于模板的collections,serialization,file,I/Odevice,directorymanagement,date/time類(lèi)。甚至還包括正則表達(dá)式的處理功能。(4)支持2D/3D圖形渲染,支持OpenGLQt支持各種用戶(hù)化外觀,基于Qt的應(yīng)用程序能夠在windows外觀、Motif外觀、以及其他一些用戶(hù)化外觀主題之間切換。(5)大量的開(kāi)發(fā)文檔;Qt提供了大量的聯(lián)機(jī)參考文檔,有超文本HTML方式,也有UNIX幫助頁(yè)、man手冊(cè)頁(yè),以及補(bǔ)充說(shuō)明,如assistant。QT版本Qt泛指Qt的所有桌面版本,比如Qt/X11,QtWindows,QtMac等。由于Qt最早是在Linux中隨著KDE流行開(kāi)來(lái)的,因此通常Qt都指用于Linux/Unix的Qt/X11。本課題使用的除了在linux桌面環(huán)境下的Qt/X11之外,為了使程序能夠在嵌入式開(kāi)發(fā)板上運(yùn)行起來(lái),還使用了面向嵌入式的QT/Embedded。QT/Embedded開(kāi)發(fā)那些運(yùn)行在移動(dòng)設(shè)備,如PDA和手機(jī)上的軟件是很有挑戰(zhàn)性的,因?yàn)榕c桌面系統(tǒng)相比,嵌入式系統(tǒng)的處理器更慢,永久性?xún)?chǔ)存容量更小,內(nèi)存更少,并且顯示器也更少。為了解決資源利用方面的問(wèn)題,Trolltech公司開(kāi)發(fā)了面向嵌入式系統(tǒng)的Qt版本。QT/Embeddedlinux可以在運(yùn)行l(wèi)inux的任何硬件上運(yùn)行—包括Intelx86、MIPS、ARM、Strong-ARM、Motorola/Freescale68000,以及PowerPC體系。不像Qt/X11,它不需要X窗口系統(tǒng),它實(shí)現(xiàn)的是自己的窗口系統(tǒng),即QWS,從而大大節(jié)省了存儲(chǔ)和內(nèi)存。為了盡可能多地減少內(nèi)存占用量,QT/Embeddedlinux可以被重新編譯億去掉那些不用的特性。如果可以提前知道設(shè)備需要用到哪些應(yīng)用程序或者組件,就可以將QT/Embeddedlinux的那些庫(kù)靜態(tài)地編譯到一起。信號(hào)與槽機(jī)制信號(hào)與槽機(jī)制是Qt的一個(gè)主要特征,是Qt與其它工具包最不相同的部分。在圖形用戶(hù)界面編程中,經(jīng)常會(huì)出現(xiàn)窗口中的一個(gè)部件發(fā)生的變化被通知給另一個(gè)部件,在Qt中采用信號(hào)和槽來(lái)實(shí)現(xiàn)對(duì)象部件之間的通信。信號(hào)當(dāng)某個(gè)信號(hào)對(duì)其客戶(hù)或所有者發(fā)生的內(nèi)部狀態(tài)發(fā)生改變,信號(hào)被一個(gè)對(duì)象發(fā)射。只有定義過(guò)這個(gè)信號(hào)的類(lèi)及其派生類(lèi)能夠發(fā)射這個(gè)信號(hào)。當(dāng)一個(gè)信號(hào)被發(fā)射時(shí),與其相關(guān)聯(lián)的槽將被立刻執(zhí)行,就象一個(gè)正常的函數(shù)調(diào)用一樣。信號(hào)-槽機(jī)制完全獨(dú)立于任何GUI事件循環(huán)。只有當(dāng)所有的槽返回以后發(fā)射函數(shù)(emit)才返回。如果存在多個(gè)槽與某個(gè)信號(hào)相關(guān)聯(lián),那么,當(dāng)這個(gè)信號(hào)被發(fā)射時(shí),這些槽將會(huì)一個(gè)接一個(gè)地執(zhí)行,但是它們執(zhí)行的順序?qū)?huì)是隨機(jī)的、不確定的,我們不能人為地指定哪個(gè)先執(zhí)行、哪個(gè)后執(zhí)行。槽槽是普通的C++成員函數(shù),可以被正常調(diào)用,它們唯一的特殊性就是很多信號(hào)可以與其相關(guān)聯(lián)。當(dāng)與其關(guān)聯(lián)的信號(hào)被發(fā)射時(shí),這個(gè)槽就會(huì)被調(diào)用。槽可以有參數(shù),但槽的參數(shù)不能有缺省值。信號(hào)與槽的關(guān)聯(lián)通過(guò)調(diào)用QObject對(duì)象的connect函數(shù)來(lái)將某個(gè)對(duì)象的信號(hào)與另外一個(gè)對(duì)象的槽函數(shù)相關(guān)聯(lián),這樣當(dāng)發(fā)射者發(fā)射信號(hào)時(shí),接收者的槽函數(shù)將被調(diào)用。該函數(shù)的定義如下:boolQObject::connect(constQObject*sender,constchar*signal,boolQObject::connect(constQObject*sender,constchar*signal, constQObject*receiver,constchar*member)這個(gè)函數(shù)的作用就是將發(fā)射者sender對(duì)象中的信號(hào)signal與接收receiver中的member槽函數(shù)聯(lián)系起來(lái)。當(dāng)指定信號(hào)signal時(shí)必須使用QT中的宏SIGNAL(),當(dāng)指定槽函數(shù)時(shí)必須使用宏SLOT()。如果發(fā)射者與接收者屬于同一個(gè)對(duì)象的話,那么在connect調(diào)用中接收者參數(shù)可以省略。信號(hào)與槽之間通過(guò)connect()函數(shù)可以有很多種連接方式。如一個(gè)信號(hào)連接一個(gè)槽、同一信號(hào)連接多個(gè)槽、多個(gè)信號(hào)連接到同一個(gè)槽、也可以由一個(gè)信號(hào)連接到另一個(gè)信號(hào)。4.2集成開(kāi)發(fā)環(huán)境QtCreatorQtCreator

是全新的跨平臺(tái)QtIDE,可單獨(dú)使用,也可與Qt庫(kù)和開(kāi)發(fā)工具組成

一套完整的SDK.其中包括:高級(jí)C++代碼編輯器,項(xiàng)目和生成管理工具,集成的上下文相關(guān)的幫助系統(tǒng),圖形化調(diào)試器,代碼管理和瀏覽工具。QtCreator功能與特性QtCreator是專(zhuān)為滿(mǎn)足Qt開(kāi)發(fā)人員需求而量身定制的跨平臺(tái)集成開(kāi)發(fā)環(huán)境(IDE)。QtCreator可在Windows、Linux/X11和MacOSX桌面操作系統(tǒng)上運(yùn)行,供開(kāi)發(fā)人員針對(duì)多個(gè)桌面和移動(dòng)設(shè)備平臺(tái)創(chuàng)建應(yīng)用程序。復(fù)雜代碼編輯器QtCreator的高級(jí)代碼編輯器支持編輯C++和QML(JavaScript)、上下文相關(guān)幫助、代碼完成功能、本機(jī)代碼轉(zhuǎn)化及其他功能。版本控制QtCreator匯集了最流行的版本控制系統(tǒng),包括Git、Subversion、Perforce、CVS和Mercurial。集成用戶(hù)界面設(shè)計(jì)器QtCreator提供了兩個(gè)集成的可視化編輯器:用于通過(guò)Qtwidget生成用戶(hù)界面的QtDesigner,以及用于通過(guò)QML語(yǔ)言開(kāi)發(fā)動(dòng)態(tài)用戶(hù)界面的QtQuickDesigner*。項(xiàng)目和編譯管理無(wú)論是導(dǎo)入現(xiàn)有項(xiàng)目還是創(chuàng)建一個(gè)全新項(xiàng)目,QtCreator都能生成所有必要的文件。包括對(duì)cross-qmake和Cmake的支持。桌面和移動(dòng)平臺(tái)QtCreator支持在桌面系統(tǒng)和移動(dòng)設(shè)備中編譯和運(yùn)行Qt應(yīng)用程序。通過(guò)編譯設(shè)置您可以在目標(biāo)平臺(tái)之間快速切換。Qt模擬器Qt模擬器是諾基亞QtSDK的一部分,可在與目標(biāo)移動(dòng)設(shè)備相似的環(huán)境中對(duì)移動(dòng)設(shè)備的Qt應(yīng)用程序進(jìn)行測(cè)試。4.3播放器Mplayer由于本課題為了在嵌入式上實(shí)現(xiàn)網(wǎng)絡(luò)播放功能所采取的方案是利用QT設(shè)計(jì)的用戶(hù)界面來(lái)調(diào)用視頻播放器,這一方案的優(yōu)勢(shì)在于使用開(kāi)源的視頻播放器,免卻了自己開(kāi)發(fā)解碼部分及與用戶(hù)界面整合的煩瑣,從而使得開(kāi)發(fā)流程變得簡(jiǎn)單。MPlayer是一款開(kāi)源的多媒體播放器,以GNU通用公共許可證發(fā)布。此款軟件可在各主流作業(yè)系統(tǒng)使用,例如Linux和其他類(lèi)Unix作業(yè)系統(tǒng)、微軟的視窗系統(tǒng)及蘋(píng)果電腦的MacOSX系統(tǒng)。由于它支持多種視頻格式、播放速度流暢及體積小等特點(diǎn),使得它成為嵌入式網(wǎng)絡(luò)播放器開(kāi)發(fā)的最佳選擇。Mplayer優(yōu)點(diǎn)支持多種播放格式MPlayer支持相當(dāng)多的媒體格式,無(wú)論在音頻播放還是在視頻播放方面,可以說(shuō)它支持的格式是相當(dāng)全面的。視頻格式支持:Cinepak、DV、H.263、H.264/MPEG-4AVC、HuffYUV、Indeo、MJPEG、MPEG-1、MPEG-2、MPEG-4Part2、RealVideo、Sorenson、Theora、WMV。音頻格式支持:AAC、AC3、ALAC、AMR、FLAC,IntelMusicCoder,Monkey'sAudio、MP3、Musepack、RealAudio、Shorten、Speex、Vorbis、WMA。網(wǎng)絡(luò)協(xié)議:RTP、RTSP、HTTP、FTP、MMS,Netstream(mpst://)。除此之外,mplayer還支持多種字幕格式與圖像格式。支持輸出設(shè)備廣MPlayer的另一個(gè)大的特色是支持廣泛的輸出設(shè)備。它可以在X11、Xv、DGA、OpenGL、SVGAlib、fbdev、AAlib、DirectFB下工作,而且你也能使用GGI、SDL(由此可以使用它們支持的各種驅(qū)動(dòng)模式)和一些低級(jí)的硬件相關(guān)的驅(qū)動(dòng)模式(比如Matrox、3Dfx和RADEON、Mach64、Permedia3)!強(qiáng)大的播放能力這個(gè)播放器能夠穩(wěn)如泰山的播放被破壞的MPEG文件(對(duì)一些VCD有用),而它能播放著名的windowsmediaplayer都打不開(kāi)的的壞的AVI文件。甚至,沒(méi)有索引部分的AVI文件可播放,你能暫時(shí)由重建他們的索引-idx選擇,或者用MEncoder永久重建,使你能夠在影片中搜索。除此之外,mplayer的播放速度和質(zhì)量以及穩(wěn)定度也是驚人的。內(nèi)置多種解碼器Mplayer本身編譯自帶了多種類(lèi)型的解碼器,不需要再安裝xvid、ffdshow、ac3filter、ogg、vobsub等等所謂看DVDrip必備解碼器,也不會(huì)跟你的電腦原來(lái)所安裝的解碼器有任何沖突。Mplayer播放命令Mplayer可工作于界面模式,也可工作于slave模式。在slave模式下,用戶(hù)可以在linux終端輸入命令對(duì)mplayer進(jìn)行操作,如暫停、退出、獲取文件信息等。本課題主要利用mplayer的slave模式,使得用戶(hù)界面軟件可以通過(guò)linux終端實(shí)現(xiàn)對(duì)mplayer的調(diào)用與控制。Mplayer本地播放命令:mplayer[選項(xiàng)][文件|URL|播放列表|?]mplayer網(wǎng)絡(luò)播放命令:mplayer[file|mms[t]|http|http_proxy|rt[s]p|ftp|udp|unsv|smb]://[用戶(hù)名:密碼@]URL[:端口][選項(xiàng)]選項(xiàng)參數(shù)含義--ao設(shè)置可用的音頻輸出驅(qū)動(dòng)如:–aooss--vo設(shè)置可用的視頻輸出驅(qū)動(dòng)--slave打開(kāi)slave模式,將MPlayer作為其它程序的后端.MPlayer將從終端讀取簡(jiǎn)單命令行,而不再截獲鍵盤(pán)事件.--quiet顯示較少的輸出和狀態(tài)信息--wid告訴MPlayer使用一個(gè)X11窗口,在指定窗口播放視頻.網(wǎng)絡(luò)播放器的實(shí)現(xiàn)軟件體系結(jié)構(gòu)嵌入式軟件網(wǎng)絡(luò)播放器工作于嵌入式操作系統(tǒng)linux與嵌入式開(kāi)發(fā)平臺(tái)硬件之上,其體系結(jié)構(gòu)如圖3-1所示。應(yīng)用層應(yīng)用層操作系統(tǒng)層硬件層用戶(hù)界面GUIFTP服務(wù) 系統(tǒng)終端LCD Audiodevice 觸摸屏圖3-1MP3播放器的軟件體系結(jié)構(gòu)本課題著重于用戶(hù)界面GUI的設(shè)計(jì)及移植,接下來(lái)將會(huì)介紹用戶(hù)界面的模塊及用戶(hù)界面工作流程。本課題將用戶(hù)界面分為三個(gè)模塊:本地播放、網(wǎng)絡(luò)播放及小鍵盤(pán)輸入。本地播放模塊實(shí)現(xiàn)視頻及音頻文件的本地加載及播放,考慮這個(gè)播放器的用途主要是用于網(wǎng)絡(luò)播放,所以在播放控制上面只實(shí)現(xiàn)了:播放、暫停、停止、靜音、改變音量的功能。網(wǎng)絡(luò)播放模塊利用FTP協(xié)議點(diǎn)播服務(wù)器上播放列表上的視頻及音頻文件。小鍵盤(pán)輸入的作用則是用來(lái)輸入FTP服務(wù)器的網(wǎng)絡(luò)地址、用戶(hù)名及密碼。本地播放本地播放播放區(qū)域播放控制網(wǎng)絡(luò)模塊小鍵盤(pán)輸入根據(jù)軟件設(shè)計(jì)模塊的構(gòu)思,最終在宿主機(jī)上實(shí)現(xiàn)的用戶(hù)面如圖—所示:用戶(hù)界面主要功能實(shí)現(xiàn)播放控制功能實(shí)現(xiàn)為了實(shí)現(xiàn)播放器的播放與暫停功能,應(yīng)該要有一個(gè)變量來(lái)存儲(chǔ)視頻及音頻文件的本地路徑及網(wǎng)絡(luò)路徑以便使播放器獲取播放文件,在播放器的類(lèi)中使用類(lèi)型為QString的filename來(lái)存儲(chǔ)文件路徑。同時(shí)為了標(biāo)識(shí)播放器的播放狀態(tài),設(shè)置了一個(gè)int類(lèi)型的播放標(biāo)識(shí)—PlayState。文件路徑是通過(guò)open_file()函數(shù)以及獲取ftp播放列表后的雙擊事件獲取的,獲取文件路徑后立即賦值給filename,同時(shí)初始化進(jìn)度條及播放時(shí)間。播放播放Filename是否為空獲取播放文件信息:文件時(shí)間長(zhǎng)度、當(dāng)前播放位置等。開(kāi)始播放激活進(jìn)度條TimeSlider顯示時(shí)間長(zhǎng)度、當(dāng)前播放位置及文件名稱(chēng)是否停止播放是否暫停停止播放暫停播放網(wǎng)絡(luò)模塊實(shí)現(xiàn)網(wǎng)絡(luò)模塊的主要作用是登陸到FTP服務(wù)器并獲取播放列表,并通過(guò)雙擊事件傳遞網(wǎng)絡(luò)文件的路徑至filename。下面會(huì)介紹如何登陸到FTP服務(wù)器并獲取播放列表。連接FTP服務(wù)器連接FTP服務(wù)器connectToHost()登陸至FTP服務(wù)器Login()通過(guò)信號(hào)QFtp::listInfo()傳遞信息槽函數(shù)getFileList()接收信息并在列表窗口顯示為了登陸到FTP服務(wù)器獲取服務(wù)器信息,QT提供了QFTP類(lèi)來(lái)實(shí)現(xiàn)這一操作。在定義類(lèi)為QFTP的對(duì)象指針ftp后可通過(guò)兩步連接上FTP服務(wù)器。ftp->connectToHost(constQString&host,quint16port=21)通過(guò)提供主機(jī)host地址及端口port(默認(rèn)為21)則可連接FTP服務(wù)器,如: ftp->connectToHost(“10.14.5連接FTP服務(wù)器后需要登陸方可獲取服務(wù)器文件列表,這一步可通過(guò)ftp->login(constQString&username,constQString&password)通過(guò)提供FTP服務(wù)器的用戶(hù)名userName及密碼password就可登陸至FTP服務(wù)器,如ftp->login(“abc”,”1234”完成上述兩個(gè)步驟后應(yīng)用程序就和FTP服務(wù)器建立了連接。為了獲取FTP上文件列表,需要通過(guò)類(lèi)QUrlInfo定義的對(duì)象來(lái)傳遞實(shí)現(xiàn)。QUrlInfo可以存儲(chǔ)網(wǎng)絡(luò)路徑URL上的信息,如文件名稱(chēng)、大小、所有者、權(quán)限等。QFTP有一個(gè)信號(hào)voidQFtp::listInfo(constQUrlInfo&message)通過(guò)這個(gè)信號(hào)就可以吧FTP服務(wù)器上文件信息傳遞給槽函數(shù)。然后在槽函數(shù)中將由對(duì)象指針message傳遞而來(lái)的信息顯示在列表窗口中。小鍵盤(pán)模塊實(shí)現(xiàn)由于開(kāi)發(fā)板上的嵌入式軟件不是運(yùn)行在Qtopia環(huán)境下而是作為單獨(dú)的窗口運(yùn)行,在登陸到FTP服務(wù)器上時(shí)需要輸入IP地址、用戶(hù)名及密碼的信息。所以要有一個(gè)配套的小鍵盤(pán)來(lái)輸入必要的信息。 既然小鍵盤(pán)是配套給應(yīng)用程序使用的,那么它的設(shè)計(jì)應(yīng)該盡可能的簡(jiǎn)潔。例如在這個(gè)界面程序里面,需要輸入信息的僅有三個(gè)輸入框,所以不必要使得鍵盤(pán)對(duì)任意可輸入的對(duì)話框有效,它只需要完成對(duì)三個(gè)輸入框進(jìn)行輸入的任務(wù)。于是我的設(shè)計(jì)思想就是在小鍵盤(pán)里面設(shè)置三個(gè)選項(xiàng):IP地址、用戶(hù)名及密碼。在輸入信息的時(shí)候小鍵盤(pán)會(huì)根據(jù)用戶(hù)的選擇進(jìn)行信息輸入,如用戶(hù)選擇的是IP地址,那么就可以對(duì)IP地址框進(jìn)行信息的輸入及清除。 為了播放界面的簡(jiǎn)潔及美觀,小鍵盤(pán)應(yīng)該通過(guò)主界面的按鍵來(lái)觸發(fā)而非集成至主界面上。為了實(shí)現(xiàn)這一功能,需要把小鍵盤(pán)封裝為一個(gè)類(lèi),然后在主界面通過(guò)按鍵觸發(fā)調(diào)構(gòu)建一個(gè)對(duì)象并顯示,對(duì)象創(chuàng)建后就可以通過(guò)信號(hào)與槽的連接把鍵盤(pán)上按鍵的信息傳遞給主界面的輸入框。voidvoidWidget::on_keyboard_Button_clicked(){key=newkeyboard();key->show();connect(key,SIGNAL(input_value(QString,int)),this,SLOT(accept_value(QString,int)));}用戶(hù)界面及Mplayer的移植6.1Mplayer的移植Mplayer需要經(jīng)過(guò)移植方可在嵌入式開(kāi)發(fā)板上正常運(yùn)行,移植流程如圖—所示。本小節(jié)主要介紹Mplayer的配置過(guò)程。因?yàn)檫@是mplayer移植過(guò)程的主要難點(diǎn)。配置mplayer配置mplayer生產(chǎn)makefile文件交叉編譯、修改生成可執(zhí)行文件圖6-2MPlayer的移植流程下面,我們簡(jiǎn)單介紹一下如何配置MPlayer--cc=arm-linux-gcc\//--cc=arm-linux-gcc\//選用系統(tǒng)默認(rèn)交叉編譯器--host-cc=gcc\//用來(lái)編譯一些需要在host上執(zhí)行的中間文件--enable-cross-compile\//支持交叉編譯--target=arm-armv4-linux\//支持armv4架構(gòu)的arm-linux--enable-linux-devfs\//支持開(kāi)發(fā)板上的devfs文件系統(tǒng)--disable-win32dll\//不支持win32的庫(kù),因?yàn)椴贿m用與ARM--disable-dvdread\//不支持讀dvd--enable-fbdev\ //支持開(kāi)發(fā)板的fb設(shè)備--disable-mencoder\//不編譯mencoder編解碼器--enable-liba52\//編譯liba52庫(kù)--disable-libmpeg2\//不支持mpeg2格式--disable-mp3lib\//不使用內(nèi)部的MP3解碼庫(kù)--disable-mad\//支持mad作為MP3解碼的庫(kù),這個(gè)需要另外編譯的。--enable-static\//靜態(tài)編譯--disable-live\//不支持live--disable-dvdnav\ //不支持dvdnav--disable-jpeg\//不支持jpeg--disable-rtc\//不使用時(shí)鐘控制--with-extraincdir=/usr/local/arm//arm-linux/sys-include/:/usr/local/arm/3.4.1/lib/include\//指明libmad的頭文件--with-extralibdir=/usr/local/arm//arm-liunx/lib:/usr/local/arm/3.4.1/lib/lib\//指明libmad的庫(kù)地址由于在終端輸入命令時(shí)命令比較長(zhǎng),所以可以在配置的時(shí)候自己建一個(gè)腳本文件。配置完之后就直接make了。交叉編譯成功后mplayer就會(huì)安裝到指定目錄中。6.2用戶(hù)界面的移植播發(fā)界面的具體移植過(guò)程分為3個(gè)驟步分別為:交叉編譯,尋找需要的庫(kù)文件和編寫(xiě)運(yùn)行腳本。下面就每一步進(jìn)行簡(jiǎn)單的說(shuō)明。(1)交叉編譯。這一部分使用的QT版本是面向嵌入式的qt-embdded-,用它編譯出來(lái)的程序可以在ARM-linux嵌入式系統(tǒng)中使用??梢暂斎胍韵旅钸M(jìn)行編譯。#/home/sprife/qt4/for_arm/qt-embedded-linux-opensource-src-/bin/qmake–project//建立工程#/home/sprife/qt4/for_arm/qt-embedded-linux-opensource-src-/bin/qmake//生成頭文件和Makefile#make //編譯如果在Qt/X11中能通過(guò)編譯,在這里也會(huì)順利通過(guò)的。預(yù)防之前有make過(guò),所以在make之前最好makeclean一下。成功編譯之后,在播放器的工程目錄下就會(huì)有一個(gè)二進(jìn)制可執(zhí)行文件。但是直接下載到板上運(yùn)行會(huì)出錯(cuò)的,原因是它依賴(lài)于很多庫(kù)文件。必須指定了庫(kù)文件的路徑,程序才可以正常運(yùn)行。(2)尋找需要的庫(kù)文件。在工程目錄下運(yùn)行arm-linux-readelf命令可以查看文件所依賴(lài)的庫(kù)文件。[root@vm-devmedia]#arm-linux-readelf-dmediaDynamicsegmentatoffset0x257b8contains31entries:TagTypeName/Value0x00000001(NEEDED)Sharedlibrary:[libQtGui.so.4]0x00000001(NEEDED)Sharedlibrary:[libts-0.0.so.0]0x00000001(NEEDED)Sharedlibrary:[libQtNetwork.so.4]0x00000001(NEEDED)Sharedlibrary:[libQtCore.so.4]0x00000001(NEEDED)Sharedlibrary:[librt.so.1]0x00000001(NEEDED)Sharedlibrary:[libdl.so.2]0x00000001(NEEDED)Sharedlibrary:[libpthread.so.0]0x00000001(NEEDED)Sharedlibrary:[libstdc++.so.6]0x00000001

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論