嵌入式Linux開源軟件移植與應(yīng)用ppt課件_第1頁
嵌入式Linux開源軟件移植與應(yīng)用ppt課件_第2頁
嵌入式Linux開源軟件移植與應(yīng)用ppt課件_第3頁
嵌入式Linux開源軟件移植與應(yīng)用ppt課件_第4頁
嵌入式Linux開源軟件移植與應(yīng)用ppt課件_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1,第5章 嵌入式Linux開源軟件移植與應(yīng)用,2,第五章 嵌入式Linux接口設(shè)計與 驅(qū)動程序,主要內(nèi)容 第一節(jié) 嵌入式WebServer GoAhead的移植與應(yīng)用 第二節(jié) 嵌入式WebService gSOAP的移植與應(yīng)用 第三節(jié) 嵌入式數(shù)據(jù)庫SQLite的移植與使用 第四節(jié) 播放器Mplayer的移植 第五節(jié) ffmpeg應(yīng)用 第六節(jié) 開源軟件移植的一般過程 第七節(jié) J2ME-phoneME移植 第八節(jié) 嵌入式瀏覽器konqueror移植,1,3,第五章 嵌入式Linux接口設(shè)計與 驅(qū)動程序,主要內(nèi)容 高端嵌入式系統(tǒng)往往基于一個功能強(qiáng)大的操作系統(tǒng),而使用Linux進(jìn)行架構(gòu)的好處之一就是

2、可以從X86機(jī)上移植大量軟件做嵌入式開發(fā)。本章介紹了多個軟件的移植以及應(yīng)用,包括嵌入式Web 服務(wù) GoAhead、嵌入式數(shù)據(jù)庫SQLite、嵌入式媒體播放器Mplayer、JVM phoneMe、Web 服務(wù)gSOAP、Web 瀏覽器Konqueror。由于Linux軟件的開源特點以及交叉編譯工具的使用,向嵌入式平臺上移植豐富的軟件成為一件非常輕松的事情。需要特別注意的是相關(guān)軟件的版本與依賴關(guān)系,包括交叉編譯器,2,4,內(nèi)容: 一、嵌入式Web服務(wù)器 二、GoAhead介紹 三、GoAhead在ARM平臺上的移植 四、頁面操作,第一節(jié) 嵌入式WebServer GoAhead的移植與應(yīng)用,3

3、,5,隨著后PC機(jī)時代的到臨,計算機(jī)的發(fā)展已經(jīng)從以PC機(jī)為中心轉(zhuǎn)向了以嵌入式系統(tǒng)為中心的方向:嵌入式系統(tǒng)的迅猛發(fā)展和IA(信息電器)的不斷成熟使得其應(yīng)用越來越廣泛。其中,嵌入式系統(tǒng)與網(wǎng)絡(luò)的結(jié)合也是當(dāng)今發(fā)展的一大趨勢,而嵌入式網(wǎng)絡(luò)技術(shù)的產(chǎn)生正好迎合了這個趨勢。由于嵌入式系統(tǒng)的專用性強(qiáng)、體積小且價格低廉,使得嵌入式設(shè)備已經(jīng)開始應(yīng)用于智能家居系統(tǒng)、工業(yè)智能化從站系統(tǒng)、LED網(wǎng)絡(luò)控制顯示屏系統(tǒng)、網(wǎng)絡(luò)安全加密系統(tǒng)等各個網(wǎng)絡(luò)相關(guān)領(lǐng)域。 在嵌入式設(shè)備中,所謂的瘦Web服務(wù)器,即功能不會很全面的Web服務(wù)器,往往擁有有限的資源。因此實現(xiàn)嵌入式WebServer方案的主要技術(shù)難點是:在不影響其整體性能的前提下,

4、如何利用它自身有限的資源,同時又必須滿足Web應(yīng)用服務(wù)器的特征,4,第一節(jié) 嵌入式WebServer GoAhead的移植與應(yīng)用 一、嵌入式Web服務(wù)器,6,由下圖可以看出:由于HTML語言的標(biāo)準(zhǔn)統(tǒng)一性,只要在嵌入式設(shè)備中存在一個微型服務(wù)器,就可以使用任意一種Web瀏覽器接收和發(fā)送信息。所以如何在嵌入式設(shè)備中設(shè)計和安裝Web服務(wù)器,就成了嵌入式Web服務(wù)器的發(fā)展和研究方向,5,第一節(jié) 嵌入式WebServer GoAhead的移植與應(yīng)用 一、嵌入式Web服務(wù)器,7,GoAhead Webserver是為嵌入式設(shè)備的需要而設(shè)計的。該Webserver軟件不僅開源,而且具有各種各樣的特性,包括支持

5、活動服務(wù)頁、嵌入Java描述語言、in-process CGI形式、SSL、文摘訪問認(rèn)證、用戶管理和標(biāo)準(zhǔn)CGI等,腳本大小僅為60K。這對于那些需要在基于瀏覽管理模式的設(shè)備上傳遞動態(tài)信息的系統(tǒng)管理開發(fā)人員來說,這點非常重要。 GoAhead Webserver支持多種操作系統(tǒng)和開發(fā)平臺,包括Windows NT/98/95、Windows CE、Embedded Linux、Linux、VxWorks、QNX和Lynx等,它也有其它操作系統(tǒng)的定制產(chǎn)品,因此具有很強(qiáng)大的可移植性。GoAhead網(wǎng)絡(luò)服務(wù)器的發(fā)展同時也促進(jìn)了嵌入式網(wǎng)絡(luò)服務(wù)器的源代碼的進(jìn)化。由于其開源,世界各地的廠商和愛好者都紛紛下載

6、并優(yōu)化GoAhead的源代碼,這也使得GoAhead WebServer成為市場上最優(yōu)秀的嵌入式網(wǎng)絡(luò)服務(wù)器之一。 作為一款嵌入式Web服務(wù)器,GoAhead具有如下特點: 優(yōu)點:免費,體積小巧,支持多平臺,完全針對嵌入式系統(tǒng)設(shè)計,支持嵌入的JavaScript與動態(tài)數(shù)據(jù)頁。 缺點:其對ASP的支持意味著要依靠微軟的平臺,安全方面的考慮很少,6,第一節(jié) 嵌入式WebServer GoAhead的移植與應(yīng)用 二、GoAhead介紹,8,完成GoAhead移植后,需要在此基礎(chǔ)上完成系統(tǒng)運(yùn)行所需要的頁面文件,透過頁面文件來實現(xiàn)Web對終端的管理。 頁面操作方式有三種,如下介紹所示: 1,靜態(tài)頁面 靜態(tài)

7、頁面可在http編輯工具中完成,完成直接下載至相應(yīng)的Web存放目錄即可,此種方式可完成諸如說明文檔、終端信息等固定內(nèi)容,但無法和用戶進(jìn)行交互操作。 2,cgi頁面 cgi頁面,即可用C語言編輯的頁面,其操作方式可參考cgitest.c文件(該文件存放在GoAhead2.18webcgi-bin目錄下),使用時需要將此文件加入項目中一起編輯。GoAhead WebServer任務(wù)啟動后,在地址欄中直接輸入21cgi-bincgitest(其中21為Web服務(wù)器的IP地址)就可以觀察到相應(yīng)結(jié)果。GoAhead的cgi入口處理中,在地址欄內(nèi)如果帶有cgie

8、ntry=name的字樣時,則處理器會尋找name函數(shù)來處理該請求,相反,如果沒有此請求字樣時,GoAhead搜索名稱為name_cgientry的函數(shù),即請求的名稱增加后綴_cgientry;另外需要注意的是cgi任務(wù)的退出要使用return,而不是使用任務(wù)刪除,return退出后,系統(tǒng)會重新定位stdin、stdout等,否則由cgi重定位的輸入輸出會保持,會影響后續(xù)的其他類型的Web請求,7,第一節(jié) 嵌入式WebServer GoAhead的移植與應(yīng)用 四、頁面操作,9,3,嵌入式Javascript 嵌入式Javascript是GoAhead WebServer提供的一種方式,其采用表

9、單提交的方式,提供了完善的輸入輸出流程控制,同樣可采用C語言進(jìn)行設(shè)計,可很好的與系統(tǒng)其它部分實現(xiàn)代碼共享。如Today is ,此句代碼即可在網(wǎng)頁上輸出“Hello World”字樣。 由于采用表單提交的方式,通過特殊的標(biāo)記印記,嵌入已經(jīng)實現(xiàn)的C函數(shù)至頁面文件中,在提交時,由已經(jīng)在系統(tǒng)定義并注冊的函數(shù)來接收處理,通過代碼寫Web頁面來實現(xiàn)輸出。其設(shè)計過程主要涉及以下幾個方面: 1)頁面設(shè)計。嵌入式Javascript文件為asp文件,其內(nèi)容可按照標(biāo)準(zhǔn)的javascript來設(shè)計,在創(chuàng)建頁面過程中,如果需要從原系統(tǒng)中動態(tài)生成頁面,如當(dāng)前終端的參數(shù)配置,此時需要使用嵌入式Javascript的獨立

10、定義,在需要嵌入創(chuàng)建函數(shù)的地方用如下格式加入:,此函數(shù)需要事先定義好并在系統(tǒng)啟動向WebServer注冊完成,8,第一節(jié) 嵌入式WebServer GoAhead的移植與應(yīng)用 四、頁面操作,10,2)創(chuàng)建函數(shù)定義:一個標(biāo)準(zhǔn)的創(chuàng)建函數(shù)int aspCreateHomeAsp(int eid, webs_t wp, int argc, char_t *argv),前面兩個參數(shù)為頁面參數(shù),不能改動。 3)注冊創(chuàng)建函數(shù):websAspDefine(T(CreateCurrentUser), aspCreateHomeAsp)使用此函數(shù)注冊后,如果asp頁面中出現(xiàn),則WebServer會調(diào)用aspCre

11、ateHomeAsp()來輸出頁面。 4)Form提交函數(shù):要達(dá)到交互使用,則必須響應(yīng)用戶提交,要做到這一點,很簡單,在頁面中加入 ,其中AddGroup即為響應(yīng)時系統(tǒng)調(diào)用的注冊后的函數(shù)。當(dāng)然,需要提交的按鈕項需在此form體內(nèi)完成。其函數(shù)格式為:static void formAddGroup (webs_t wp, char_t *path, char_t *query)。 5)注冊Form提交函數(shù):websFormDefine(T(AddGroup), formAddGroup),webServer運(yùn)行此函數(shù)后,當(dāng)頁面用提交時則調(diào)用formAddGroup()函數(shù)來處理,9,第一節(jié) 嵌入

12、式WebServer GoAhead的移植與應(yīng)用 四、頁面操作,11,內(nèi)容: 一、gSOAP介紹 二、gSOAP裁減 三、gSOAP應(yīng)用,第二節(jié) 嵌入式WebService gSOAP的移植與應(yīng)用,10,12,Web Service是近幾年較為流行的Web應(yīng)用開發(fā)技術(shù)。它改變了傳統(tǒng)的B/S或C/S軟件開發(fā)模式,為軟件實體之間共同協(xié)作提供了公共平臺。而這里我們所使用的gSOAP則是其中非常方便使用在嵌入式系統(tǒng)上的編譯工具。 gSOAP編譯工具提供了一個SOAP/XML關(guān)于C/C+語言的實現(xiàn),它利用編譯器提供了一組透明化的SOAP API,這就將與開發(fā)無關(guān)的SOAP實現(xiàn)細(xì)節(jié)對用戶隱藏起來。因此,使

13、用gSOAP工具生成程序非常方便。gSOAP的使用范圍也非常廣泛,能夠集成C/C+代碼、Fortran代碼、其他SOAP程序提供的實時軟件的資源和信息;可以跨越多個操作系統(tǒng),語言環(huán)境等等。gSOAP包含一個WSDL生成器,可以生成Web服務(wù)的解釋。通過gSOAP的解釋器以及導(dǎo)入器,用戶可以不需要分析Web服務(wù)的細(xì)節(jié)就能夠?qū)崿F(xiàn)一個客戶端或者服務(wù)端程序。 gSOAP可以理解為一個C/C+的Web服務(wù)協(xié)議棧,該協(xié)議棧主要包括五部分:網(wǎng)絡(luò)傳輸,Web服務(wù)調(diào)用(消息傳輸),Web服務(wù)描述與注冊(接口描述、發(fā)布與發(fā)現(xiàn)),Web服務(wù)質(zhì)量(安全性,可靠性,事務(wù)控制),Web服務(wù)工作流(商業(yè)流程、事務(wù)等,11,

14、第二節(jié) 嵌入式WebService gSOAP的移植與應(yīng)用 一、gSOAP介紹,13,12,第二節(jié) 嵌入式WebService gSOAP的移植與應(yīng)用 一、gSOAP介紹,14,雖然gSOAP實現(xiàn)Web服務(wù)協(xié)議棧比較復(fù)雜,但是用gSOAP開發(fā)Web Service是非常方便的。gSOAP工具包中提供了兩個可執(zhí)行文件,wsdl2h和soapcpp2。 wsdl2h用來解析wsdl文檔生成描述服務(wù)的C/C+頭文件,例如你可以用如下的命令將一個wsdl文檔轉(zhuǎn)換為一頭文件: $ ./wsdl2h o outputfile.h inputfile.wsdl 上面的命令根據(jù)制定URL提供的WSDL文檔生成

15、一個C+語法結(jié)構(gòu)的頭文件。假如需要生成一個純C的頭文件,需要用如下命令: $ ./wsdl2h c o outputfile.h inputfile.wsdl 其中inputfile.wsdl可以是本地文件系統(tǒng)上的文件,也可以存在于Web頁上,例如: $ ./wsdl2h -c -o outputfile.h http:/xxx.xxx.xxx/xxx/inputfile.wsdl soapcpp2用來解析上面生成的頭文件并生成框架代碼,這些框架代碼是:soapStub.h 從輸入頭文件生成的經(jīng)過修改且?guī)Q空間前綴的頭文件,soapH.h 主頭文件,所有客戶機(jī)和服務(wù)源代碼都要將其包括在內(nèi),s

16、oapC.c 指定數(shù)據(jù)結(jié)構(gòu)的序列化器和反序列化器,soapClient.c客戶機(jī)存根例程,soapServer.c服務(wù)器端存根例程,13,第二節(jié) 嵌入式WebService gSOAP的移植與應(yīng)用 一、gSOAP介紹,15,另外,在gSOAP工具包中還包含兩個重要的文件:stdsoap2.h和stdsoap2.c/cpp。其中stdsoap2.h是stdsoap2.c/cpp 運(yùn)行時所需庫的頭文件,stdsoap2.c/cpp是運(yùn)行時 C/C+ 庫,帶 HTTP/SOAP 解析器和運(yùn)行時支持例程。用戶可以用這兩個文件和上述的框架代碼方便的進(jìn)行客戶端/服務(wù)器端開發(fā),14,第二節(jié) 嵌入式WebSe

17、rvice gSOAP的移植與應(yīng)用 一、gSOAP介紹,16,用gSOAP開發(fā)的Web Service服務(wù)器端和客戶端的交互模型,如圖所示。從圖中可以看出:soapC.c和stdsoap2.c是構(gòu)成客戶機(jī)與服務(wù)端的重要的源文件,其中soapC.c是上面提到的序列化器和反序列化器,當(dāng)建立請求或響應(yīng)時需要用到它的序列化功能,而解析請求或響應(yīng)時需要用到它的反序列化功能。stdsoap2.c是gSOAP工具包提供的HTTP/SOAP解析器,15,第二節(jié) 嵌入式WebService gSOAP的移植與應(yīng)用 一、gSOAP介紹,17,裁減gSOAP是為了將Web服務(wù)協(xié)議棧移植到嵌入式系統(tǒng)中,這類似于向嵌入

18、式系統(tǒng)中移植TCP/IP協(xié)議棧。裁減的目的并不是得到一個比較通用的精簡Web服務(wù)協(xié)議棧,而是從某個應(yīng)用角度出發(fā)來對gSOAP進(jìn)行裁減。 1超文本傳輸協(xié)議HTTP協(xié)議 超文本傳輸協(xié)議(HTTP)是一種為分布式,合作式,多媒體信息系統(tǒng)服務(wù),面向應(yīng)用層的協(xié)議。它是一種通用的,不分狀態(tài)(stateless)的協(xié)議,除了諸如名稱服務(wù)和分布對象管理系統(tǒng)之類的超文本用途外,還可以通過擴(kuò)展它的請求方式,錯誤代碼和報頭來完成許多任務(wù)。由于HTTP的使用極為廣泛,使得SOAP常常采用HTTP作為底層通訊協(xié)議。 1)HTTP Cookie HTTP Cookie是在HTTP連接期間瀏覽器與CGI程序之間傳遞的信息。

19、在沒有涉及到瀏覽器與CGI程序之間通信的程序中,該功能可以被裁減,16,第二節(jié) 嵌入式WebService gSOAP的移植與應(yīng)用 二、gSOAP裁減,18,2)HTTP Chunked編碼 有時服務(wù)器生成HTTP回應(yīng)是無法確定消息大小的,這時用Content-Length就無法事先寫入長度,而需要實時生成消息長度,這時服務(wù)器一般采用Chunked編碼。如果HTTP回應(yīng)的消息長度是可以確定的而且比較小,則可以不支持HTTP的Chunked編碼方式。 3)HTTP Proxy 它的主要功能就是通過網(wǎng)上的代理服務(wù)器代理用戶去取得網(wǎng)絡(luò)信息。如果在客戶與服務(wù)器之間沒有設(shè)置代理服務(wù)器,則HTTP Pro

20、xy的功能不必在系統(tǒng)中實現(xiàn)。 4)HTTP Keep-Alive Keep-Alive功能使客戶端到服務(wù)器端的連接持續(xù)有效,客戶端為每個待請求的對象建立并維護(hù)一個新的連接。對于每個這樣的連接,TCP要在客戶端和服務(wù)器端分配TCP緩沖區(qū),并維持TCP變量。當(dāng)出現(xiàn)對服務(wù)器的后繼請求時,Keep-Alive功能避免了建立或者重新建立連接。對于嵌入式設(shè)備來說,系統(tǒng)資源非常有限,因此每次通信完成后應(yīng)立即釋放連接,盡量避免長期占用系統(tǒng)資源而不釋放,17,第二節(jié) 嵌入式WebService gSOAP的移植與應(yīng)用 二、gSOAP裁減,19,2可擴(kuò)展標(biāo)識語言協(xié)議XML協(xié)議 XML(eXtensible Mar

21、kup Language,可擴(kuò)展標(biāo)記語言)是Internet上數(shù)據(jù)表示和數(shù)據(jù)交換的新標(biāo)準(zhǔn)。它是ISO(International Organization for Standardization,國際標(biāo)準(zhǔn)化組織)的SGML(Standard for General Markup Language,通用標(biāo)記語言標(biāo)準(zhǔn))的一個簡化子集。XML關(guān)注信息本身,是Web上表示結(jié)構(gòu)化信息的一種標(biāo)準(zhǔn)文本格式。與傳統(tǒng)的注重頁面信息顯示的HTML(HyperText Markup Language, 超文本鏈接標(biāo)示語言)相比,關(guān)注于內(nèi)容的XML具有以下諸多優(yōu)點:良好的可擴(kuò)展性,語言簡單有效,可自行定義標(biāo)記;內(nèi)容與

22、形式的分離,主要刻畫數(shù)據(jù)內(nèi)容,不考慮顯示效果;有嚴(yán)格的語法要求,便于分析統(tǒng)一和與數(shù)據(jù)庫信息轉(zhuǎn)換;便于傳輸,為純文本形式,可通過HTTP協(xié)議直接傳輸,可跨越防火墻等等。gSOAP工具包中提供了XML解析器,但是對于具體的應(yīng)用而言,不必對XML協(xié)議完全解析,經(jīng)過分析gSOAP源代碼,可以對XML協(xié)議作如下的精簡,18,第二節(jié) 嵌入式WebService gSOAP的移植與應(yīng)用 二、gSOAP裁減,20,1)精簡編碼方式 XML文檔一般采用UTF-8編碼方式,UTF-8可以處理目前世界上使用的每一種文字。雖然還有少數(shù)空白,但是越來越不明顯,被逐漸填平了。沒有納入的文字通常也沒有其他任何字符集實現(xiàn)過,

23、即使有也不能在 XML 中使用。如果對于某個嵌入式系統(tǒng)而言采用UTF-8編碼方式已經(jīng)足夠了。那么對于其他的編碼方式,解析器可以不支持。 2)CDATA部件 如果一個XML元素的文本中包含了大量非法的xml字符如“”和“ 3)修改configure文件,使其不去檢查交叉編譯環(huán)境。之后執(zhí)行configure命令,生產(chǎn)Makefile文件。 4)修改Makefile文件,將BCC變量里的編譯器修改為X86的編譯器,因為其編譯生成的可執(zhí)行文件要在宿主機(jī)上運(yùn)行。同時,由于編譯生成的可執(zhí)行文件sqlite要在ARM開發(fā)版上執(zhí)行,為了方便,我們將后面指定生成的庫libsqlite.la改為libsqlite

24、.a,即編譯成靜態(tài)鏈接的形式。 5)去掉可執(zhí)行文件sqlite中的調(diào)試信息,這樣可執(zhí)行文件也將變得很小,第二節(jié) 嵌入式數(shù)據(jù)庫SQLite的移植與使用 三、SQLite在ARM平臺上的移植,28,30,完成SQLite的移植之后,我們可以利用它創(chuàng)建一個數(shù)據(jù)庫,實現(xiàn)基本的SQL語句功能,包括建表、插入、查詢、刪除等基本操作,如下所示: # sqlite school sqlite create table std(sno char(8),sname varchar(10),sage smallint); sqlite insert into std values(08000001,Li Lei,1

25、7); sqlite insert into std values(08000002,Jim, 18); sqlite select * from std; 08000001|Li Lei|17 08000002|Jim|18 在上面的例子中,我們創(chuàng)建名為school的數(shù)據(jù)庫,并給這個數(shù)據(jù)庫創(chuàng)建了表std,在表std中插入了兩組數(shù)據(jù),最后查詢該表,顯示表中的數(shù)據(jù),第二節(jié) 嵌入式數(shù)據(jù)庫SQLite的移植與使用 四、SQLite的使用,29,31,我們可以采用C語言編程,調(diào)用SQLite數(shù)據(jù)庫,實現(xiàn)類似上面的操作。在使用SQLite數(shù)據(jù)庫進(jìn)行編程時,我們要加上頭文件sqlite.h,它是SQLit

26、e的API頭文件。 SQLite數(shù)據(jù)庫中提供的接口主要有: sqlite_open ( string filename , int mode , string static AVFormatContext *input_filesMAX_FILES; AVCodecContext 保存AVCodec指針和與codec相關(guān)的數(shù)據(jù),如視頻的寬度和高度,音頻的采樣速率等。AVCodecContext中的codec_type和codec_id二個變量對于解碼器和編碼器的匹配來說,最為重要。 enum CodecType codec_type; /* see CODEC_TYPE_xxx */ enum

27、 CodecID codec_id; /* see CODEC_ID_xxx */ 如上所示,codec_type保存的是CODEC_TYPE_VIDEO,CODEC_TYPE_AUDIO等媒體類型,codec_id保存的是CODEC_ID_FLV1,CODEC_ID_VP6F等編碼方式,第五節(jié) ffmpeg應(yīng)用 四、ffmpeg中幾個重要的數(shù)據(jù)結(jié)構(gòu),42,44,AVStream AVStream結(jié)構(gòu)保存與數(shù)據(jù)流相關(guān)的編解碼器,數(shù)據(jù)段等信息。比較重要的有如下二個成員: AVCodecContext *codec和void *priv_data。其中codec指針保存的就是編碼器或解碼器的結(jié)構(gòu);

28、priv_data指針保存的是和具體編解碼流相關(guān)的數(shù)據(jù)。 AVInputStream和AVOutputStream 根據(jù)輸入和輸出流的不同,前述的AVStream結(jié)構(gòu)都是封裝在AVInputStream和 AVOutputStream結(jié)構(gòu)中,在av_encode( )函數(shù)中使用。 AVInputStream中還保存的有與時間有關(guān)的信息。 AVOutputStream中還保存有與音視頻同步等相關(guān)的信息。 AVPacket AVPacket是用于保存讀取的包數(shù)據(jù)。 在視頻文件中將會讀取不同的音頻流、視頻流到這個數(shù)據(jù)結(jié)構(gòu)中,第五節(jié) ffmpeg應(yīng)用 四、ffmpeg中幾個重要的數(shù)據(jù)結(jié)構(gòu),43,45,

29、采用ffmpeg進(jìn)行應(yīng)用開發(fā)時不得不用到兩個庫:libavformat和libavcodec。許多視頻文件格式,如AVI實際上并沒有明確指出應(yīng)該使用哪種編碼來解析音頻和視頻數(shù)據(jù);它們只是定義了音頻流和視頻流如何被綁定在一個文件里面。而libavformat就是用來處理解析視頻文件并將包含在其中的流分離出來,libavcodec 則處理原始音頻和視頻流的解碼。 進(jìn)行任何操作之前,必須先初始化兩個庫:libavformat和libavcodec。采用如下函數(shù): av_register_all(); 該函數(shù)注冊庫中含有的所有可用的文件格式和編碼器,這樣當(dāng)打開一個文件時,它們才能夠自動選擇相應(yīng)的文件格

30、式和編碼器,第五節(jié) ffmpeg應(yīng)用 五、ffmpeg應(yīng)用開發(fā),44,46,打開視頻文件的代碼如下: AVFormatContext *pFormatCtx; const char *filename=test.mpg; if(av_open_input_file( if(pCodec=NULL) /handle error,第五節(jié) ffmpeg應(yīng)用 五、ffmpeg應(yīng)用開發(fā),45,47,如下函數(shù),用來打開解碼器: if(avcodec_open(pCodecCtx, pCodec)frame_rate中,分母在pCodecCtx-frame_rate_base中。在用不同的視頻文件庫時,一些

31、編碼器如ASF并不能正確的給予賦值(frame_rate_base用1代替1000)。可以加上如下代碼進(jìn)行修復(fù): if(pCodecCtx-frame_rate1000,第五節(jié) ffmpeg應(yīng)用 五、ffmpeg應(yīng)用開發(fā),46,48,最后就可以解碼這些視頻文件了,解碼函數(shù)如下: avcodec_decode_video(pCodecCtx, pFrame,第五節(jié) ffmpeg應(yīng)用 五、ffmpeg應(yīng)用開發(fā),47,49,內(nèi)容: 一、軟件移植的概念 二、軟件移植過程,第六節(jié) 開源軟件移植的一般過程,48,50,隨著Linux操作系統(tǒng)的誕生,其開源、免費、高效等特點,使得使用Linux操作系統(tǒng)的人數(shù)

32、也是與日俱增,成為了使用人數(shù)增長速度最快的操作系統(tǒng)。特別是其開源,使得很多的Linux愛好者紛紛過來參與討論和研究,為其編寫更加穩(wěn)定、安全和高效的代碼。并且也有很多志愿者、公司等參與編寫Linux操作系統(tǒng)下的軟件,這些軟件大部分跟Linux一樣也是開源免費的,個別是收費的。因為Linux的開源、免費、支持多平臺,使得其它體系結(jié)構(gòu)的計算機(jī)相擁出現(xiàn),它們大多使用Linux作為操作系統(tǒng),這也使得Intel和微軟,特別是微軟首次遭受如此巨大的打擊。 非X86體系結(jié)構(gòu)的計算機(jī)除了使用Linux作為操作系統(tǒng)之外,它們要想投入到實踐運(yùn)用當(dāng)中,還必須依賴相應(yīng)的軟件。由于大部分的軟件都是針對X86平臺開發(fā)的,并

33、且這些軟件大多是應(yīng)用軟件,其實現(xiàn)都要經(jīng)過操作系統(tǒng),而不管底層硬件的細(xì)節(jié)。Linux操作系統(tǒng)上運(yùn)行的軟件也是如此,并且大多開源。又因為單獨為一臺嵌入式設(shè)備開發(fā)一個應(yīng)用軟件所發(fā)的時間和成本都是巨大的,因此,我們直接采用這些開源軟件,針對特定的非X86平臺,做適當(dāng)修改,使它們能夠正常地運(yùn)行于這種平臺,這個過程就叫移植,第六節(jié) 開源軟件移植的一般過程 一、軟件移植的概念,49,51,當(dāng)要對一個軟件進(jìn)行移植時,我們必須有一定的理論和實踐基礎(chǔ),首先要能夠充分地掌握軟件移植的目標(biāo)平臺,包括對目標(biāo)硬件平臺的體系結(jié)構(gòu)要有一定的了解,熟練掌握目標(biāo)平臺的操作系統(tǒng)等。其次,我們還要對移植的軟件有全面的認(rèn)識,如軟件的功

34、能、支不支持目標(biāo)平臺、軟件目錄結(jié)構(gòu)等都要預(yù)先知道,甚至對軟件的源代碼也必須能夠讀懂,第六節(jié) 開源軟件移植的一般過程 二、軟件移植過程,50,52,該過程具體分成如下三個步驟: 準(zhǔn)備工作 包括準(zhǔn)備好軟件的源碼安裝包、安裝相應(yīng)的交叉編譯器、設(shè)置并配置相應(yīng)的環(huán)境變量等實驗環(huán)境。 開始移植 移植前首先查看一下軟件源碼包中的Readme文件,一般軟件開發(fā)者會在這個文件中對軟件給予一定的說明。Readme文件也可能含有軟件的安裝步驟,我們可以按照這個步驟進(jìn)行移植。大部分軟件的移植或者安裝都是進(jìn)入源碼目錄,然后執(zhí)行configure命令,生成Makefile文件,最后執(zhí)行make和make install命

35、令進(jìn)行編譯生成可執(zhí)行程序。 有時候軟件本身很大,占用的資源太多,而我們需要軟件的功能卻很有限,這樣我們有必要先對軟件進(jìn)行裁減。我們也可以在執(zhí)行configure命令的時候帶上一些選項,禁止掉我們不需要的功能。這樣,當(dāng)執(zhí)行make命令編譯時就不會把這些功能編譯進(jìn)去,使我們的可執(zhí)行程序足夠小。 在執(zhí)行make命令的時候,難免會遇到編譯出錯的問題。這時候,首先我們要保證Makefile文件中使用的編譯器是否正確,這里的編譯器不一定都是交叉平臺的編譯器,有些程序可能需要在宿主機(jī)上執(zhí)行,這時編譯這個程序選用的就是X86平臺的編譯器。其次,我們查看一下具體編譯出錯的問題,這時候一般涉及到具體的源代碼,針對

36、出現(xiàn)的問題,加以修改后重新編譯。 當(dāng)編譯沒有出現(xiàn)問題,生成可執(zhí)行程序后,可以進(jìn)行下一步,第六節(jié) 開源軟件移植的一般過程 二、軟件移植過程,51,53,運(yùn)行并測試 我們可以將編譯后的可執(zhí)行程序下載到目標(biāo)機(jī)上運(yùn)行。如果運(yùn)行正常,就可以算是移植成功。如果不能運(yùn)行或是運(yùn)行的效果不佳,那就有必要找出原因,加以解決后重新編譯,直到生成的可執(zhí)行程序正常地在目標(biāo)機(jī)上運(yùn)行。 特別需要注意的是,選擇軟件時,需關(guān)注它們本身的版本和相互依賴關(guān)系,因為某些軟件體本身它不是孤立的,而且在其開發(fā)過程時也有特殊的環(huán)境,第六節(jié) 開源軟件移植的一般過程 二、軟件移植過程,52,54,內(nèi)容: 一、phoneME介紹 二、軟件移植過

37、程與效果,第七節(jié) J2ME-phoneME移植,53,55,當(dāng)今JVM種類很多,如IBM JVM、MS JVM等等。J2ME(Java 2 Platform Micro Edition)是專為移動設(shè)備設(shè)計的,在移動通信設(shè)備上已經(jīng)有了很廣的應(yīng)用,非常適合我們在嵌入式中使用。J2ME根據(jù)硬件資源的限制,分為CLDC (Connected Limited Device Configuration)和CDC (Connected Device Configuration),無論是CLDC還是CDC,其核心都是Java虛擬機(jī)。CLDC采用了KVM,它是一個真正的最小的而又基本上完整的Java虛擬機(jī),小到

38、可以裝入幾十KB的內(nèi)存中。CDC則采用了CVM,它是一個具有完整的J2SE1.3 VM支持能力的Java虛擬機(jī),因此也更適合使用、更有效,但又比標(biāo)準(zhǔn)的J2SE VM小。 作為一個全功能的Java虛擬機(jī),CVM幾乎支持J2SE VM的所有先進(jìn)特性,包括最底層的調(diào)用、出錯處理和本地語言接口。SUN的JVM開源后,作為JAVA開發(fā)社區(qū)的一個項目,為避免版權(quán)問題,J2ME改名為phoneME。CLDC對應(yīng)phoneME Feature,而CDC對應(yīng)phoneME Feature,虛擬機(jī)則稱為CVM。phoneME Feature展開的,第七節(jié) J2ME-phoneME移植 一、phoneME介紹,54

39、,56,系統(tǒng)要求: GNU make version =3.80 并且 arm-linux-gcc version =3.3.1 1安裝jdk #./j2sdk-1_4_2_17-linux-i586-rpm.bin #rpm -ivh j2sdk-1_4_2_17-linux-i586.rpm 2編輯并運(yùn)行腳本 #vi setup.sh #vi teardown.sh -Building PCSL #vi build-pcsl.sh #sh build-pcsl.sh -Building CLDC #vi build-cldc.sh #sh build-cldc.sh -Building J

40、ava Wireless Client Software 修改文件phoneme_feature/midp/build/linux_qte_gcc/qte.gmk 第66行添加: -ljpeg -lts #sh build-sjwc.h 注意:最后一步如果編譯出現(xiàn)libobj.a含有未知參數(shù)的話,將output目錄刪除,然后從第一步重新編譯,第七節(jié) J2ME-phoneME移植 二、軟件移植過程與效果,55,57,3環(huán)境變量設(shè)置與運(yùn)行 Running Java Wireless Client Software Now what do you do with it? To run the sof

41、tware, copy the following three directories to your Linux ARM hardware: $MIDP_OUTPUT_DIR/appdb $MIDP_OUTPUT_DIR/bin $MIDP_OUTPUT_DIR/lib cp -r $QTEDIR/lib/fonts MIDP_OUTPUT_DIR/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MIDP_OUTPUT_DIR/lib export QTDIR=$MIDP_OUTPUT_DIR cd bin ./usertest,第七節(jié) J2ME-phoneME移植 二、軟件移植過程與效果,56,58,內(nèi)容: 一、konqueror介紹 二、軟件移植過程與效果,第八節(jié) 嵌入式瀏覽器konqueror移植,57,59,現(xiàn)在基于Linux操作系統(tǒng)的桌面瀏覽器家族已經(jīng)發(fā)展到相當(dāng)?shù)囊?guī)模,目前市面上可供用戶選擇的桌面瀏覽器就有20多種,但是面向嵌入式系統(tǒng)的瀏覽器還存在種種缺陷,要么是不穩(wěn)定,要么對html、flash支持不是很完善。目前Konqueror/embedded

溫馨提示

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

評論

0/150

提交評論