版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2010第六屆“博創(chuàng)杯”全國大學(xué)生嵌入式設(shè)計(jì)大賽PAGEKTV點(diǎn)播系統(tǒng)KTVAVODSystem參賽院校:濟(jì)源職業(yè)技術(shù)學(xué)院參賽隊(duì)員:宋金時(shí)、楊曉東、張書銘指導(dǎo)教師:王樹森、陳平2010年07月16日摘要隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們深刻認(rèn)識(shí),它已進(jìn)入人類社會(huì)的各個(gè)領(lǐng)域并發(fā)揮著越來越重要的作用。嵌入式作為計(jì)算機(jī)應(yīng)用的一部分,也以很快的速度發(fā)展,開發(fā)設(shè)計(jì)一套行之有效的嵌入式點(diǎn)唱系統(tǒng),對(duì)于快節(jié)奏的生活有著很好的調(diào)節(jié)作用。KTV點(diǎn)唱系統(tǒng)是娛樂場(chǎng)所不可缺少的一種娛樂方式,它設(shè)計(jì)的目的在于豐富用戶的精神文化生活,在緊張的工作之余能夠放松身心,緩解工作所帶來的壓力。還有另外一個(gè)重要的作用就是能夠加深KTV系統(tǒng)使用者之間的感情,為彼此之間的溝通增加了一種新的方式。一般用戶使用計(jì)算機(jī)收聽歌曲,通過網(wǎng)上下載的途徑,如果網(wǎng)速過慢或其它原因,使用并不是很方便。如果去KTV等娛樂場(chǎng)所或者直接購買一套我們的KTV點(diǎn)唱系統(tǒng),就可以直接的K歌所帶來樂趣,較其他娛樂方式相比既健康又享受,又不用因等待下載而浪費(fèi)時(shí)間。因此,開發(fā)這樣一套實(shí)際應(yīng)用軟件成為很有必要的事情,下面我們將以開發(fā)一套KTV點(diǎn)唱系統(tǒng)為例,談?wù)勂溟_發(fā)過程和所涉及到的問題及解決方法。關(guān)鍵詞:KTV點(diǎn)播系統(tǒng)PAGE25目錄摘要 I第一章KTV點(diǎn)播系統(tǒng)概述 11.1目的和意義 11.2系統(tǒng)功能 11.3系統(tǒng)設(shè)計(jì)方案 11.3.1嵌入式系統(tǒng)組成 11.3.2KTV點(diǎn)播系統(tǒng)組成 21.3.3方案論證 2第二章宿主機(jī)開發(fā)環(huán)境的配置 42.1開發(fā)環(huán)境方案 42.2宿主機(jī)Linux環(huán)境的搭建 4第三章硬件開發(fā)平臺(tái)及其操作系統(tǒng)的構(gòu)建 53.1開發(fā)平臺(tái)的硬件資源 53.2開發(fā)平臺(tái)的體系結(jié)構(gòu) 53.3開發(fā)平臺(tái)硬件間的工作流程 63.4開發(fā)平臺(tái)操作系統(tǒng)的搭建 63.4.1U-Boot的編譯 63.4.2燒寫U-boot 73.4.3內(nèi)核(kernel)的編譯與燒寫 7第四章基于Qt/Embedded的嵌入式圖形系統(tǒng) 84.1Qt概述 84.2Qt特征 84.3Qt編程核心技術(shù) 84.3.1元對(duì)象系統(tǒng) 84.3.2信號(hào)和插槽 94.3.3屬性 94.3.4.QObject類 94.3.5對(duì)象樹 94.3.6事件 94.3.7.QApplication類 104.3.8QWidget類 104.4QtCreator:跨平臺(tái)的QtIDE 104.5Qt/Embedded 104.5.1QTE與QT/X11比較 124.5.2Qt/Embedded開發(fā)模型 124.6建立Qt/Embedded開發(fā)環(huán)境 124.6.1準(zhǔn)備工作 124.6.2安裝交叉編譯器 134.6.3安裝qt-sdk-linux-x86-opensource-2010.04.bin開發(fā)工具包 134.6.4編譯及安裝QT/E4.6.3-x86和QT/E4.6.3-arm 14第五章KTV點(diǎn)播系統(tǒng)設(shè)計(jì) 205.1SQLite數(shù)據(jù)庫 205.1.1SQLite數(shù)據(jù)庫簡(jiǎn)介 205.1.2SQLite數(shù)據(jù)庫的操作 205.1.3Qt程序中對(duì)SQLite的操作 215.2使用QtCreator進(jìn)行系統(tǒng)開發(fā) 225.2.1熟悉QtCreatorIDE 225.2.2使用QtCreator建立工程 235.2.3設(shè)計(jì)界面 235.2.4程序代碼的編寫 235.2.5程序調(diào)試以及修改 255.2.6KTV點(diǎn)播系統(tǒng)的功能測(cè)試 265.3MPlayer播放器 285.3.1MPlayer簡(jiǎn)介 285.3.2MPlayer播放器的架構(gòu)及工作原理 28第六章系統(tǒng)的移植與集成 306.1移植QT/E4.6.3以及tslib1.4到開發(fā)板 306.2MPlayer的編譯及移植 326.2.1下載source文件與解壓 326.2.2配置 336.2.3參數(shù)配置簡(jiǎn)單介紹 336.2.5編譯及移植 336.3KTV點(diǎn)播系統(tǒng)的移植 336.3.1交叉編譯 336.3.2將程序下載到開發(fā)平臺(tái)并運(yùn)行 34第七章系統(tǒng)整體測(cè)試 357.1觸屏的測(cè)試與校準(zhǔn) 357.2系統(tǒng)完整的運(yùn)行測(cè)試 35參考文獻(xiàn) 37第一章KTV點(diǎn)播系統(tǒng)概述1.1目的和意義計(jì)算機(jī)已經(jīng)成為我們學(xué)習(xí)和工作的得力助手,但同時(shí)也是我們娛樂放松的工具。今天,計(jì)算機(jī)的價(jià)格已經(jīng)十分低廉,性能卻有了長(zhǎng)足的進(jìn)步。它已經(jīng)被應(yīng)用于許多領(lǐng)域,尤其是娛樂方面,應(yīng)用更是廣泛,其中就有和我們所要開發(fā)的系統(tǒng)及其相近的一個(gè)領(lǐng)域,那就是KTV夜總會(huì)等一些娛樂方式多樣的場(chǎng)所。將我們的KTV點(diǎn)播系統(tǒng)應(yīng)用到這些場(chǎng)所后,也為人們的業(yè)余娛樂生活提供了新的方式,特別是那些愛好唱歌,喜歡以K歌的方式放松心情的人們。在這樣的前提下,我們?cè)O(shè)計(jì)并開發(fā)了該系統(tǒng)。1.2系統(tǒng)功能我們的KTV點(diǎn)播系統(tǒng)擁有即點(diǎn)即放、歌曲查找、可根據(jù)自己喜好添加播放列表進(jìn)行播放、播放列表還可以根據(jù)用戶的意愿隨意的刪除以及其他等功能。1.3系統(tǒng)設(shè)計(jì)方案1.3.1嵌入式系統(tǒng)組成嵌入式系統(tǒng)組成如圖1.1所示,嵌入式硬件平臺(tái)中包含嵌入式微處理器、存儲(chǔ)器、通用設(shè)備接口和I/O接口等。嵌入式硬件平臺(tái)與嵌入式操作系統(tǒng)之間為中間層,也稱板級(jí)支持包(BoardSupportPackage,BSP),它將系統(tǒng)上層軟件與底層硬件分離開來,使系統(tǒng)的底層驅(qū)動(dòng)程序與硬件無關(guān),上層軟件開發(fā)人員無需關(guān)心底層硬件的具體情況,根據(jù)BSP層提供的接口即可進(jìn)行開發(fā)。嵌入式操作系統(tǒng)負(fù)責(zé)嵌入系統(tǒng)的全部軟、硬件資源的分配、任務(wù)調(diào)度,控制、協(xié)調(diào)并發(fā)活動(dòng)。嵌入式應(yīng)用軟件是由基于實(shí)時(shí)系統(tǒng)開發(fā)的應(yīng)用程序組成,用來實(shí)現(xiàn)對(duì)被控對(duì)象的控制功能。功能層是要面對(duì)被控對(duì)象和用戶,為方便用戶操作,往往需要提供一個(gè)友好的人機(jī)界面。圖1.1嵌入式系統(tǒng)組成1.3.2KTV點(diǎn)播系統(tǒng)組成KTV點(diǎn)播系統(tǒng)組成如圖1.2所示,首先使用數(shù)據(jù)庫系統(tǒng)創(chuàng)建候選歌曲列表,然后KTV點(diǎn)播系統(tǒng)通過響應(yīng)用戶的選擇操作,將用戶所選擇的相應(yīng)歌曲在數(shù)據(jù)庫的支持下添加到已選歌曲列表中,然后KTV點(diǎn)播系統(tǒng)再調(diào)用媒體播放器播放對(duì)應(yīng)的已選歌曲。圖1.2KTV點(diǎn)播系統(tǒng)組成圖1.3.3方案論證1.硬件平臺(tái)選擇現(xiàn)在用作嵌入式開發(fā)的硬件平臺(tái)很多,由于博創(chuàng)公司的經(jīng)典S3C2410平臺(tái)硬件資源豐富,可擴(kuò)展性好,并且?guī)в幸曨l音頻輸出以及觸摸屏設(shè)備,非常適合用作KTV點(diǎn)播系統(tǒng)的開發(fā)平臺(tái),因此我們?cè)诒姸嘤布脚_(tái)中選擇了博創(chuàng)2410平臺(tái)。2.Bootloder選擇用作嵌入式開發(fā)平臺(tái)的Bootloder有很多種,其中著名的被廣泛應(yīng)用到實(shí)際的有u-boot和vivi兩種,因?yàn)閡-boot具有開放源碼,支持多種嵌入式操作系統(tǒng)內(nèi)核,支持多個(gè)處理器系列,較高的可靠性和穩(wěn)定性,高度靈活的功能設(shè)置,豐富的設(shè)備驅(qū)動(dòng)源碼等特點(diǎn),所以我們選擇了u-boot作為我們開發(fā)平臺(tái)的Bootloder。3.嵌入式操作系統(tǒng)選擇Linux本身具有源碼開發(fā)、內(nèi)核可裁剪等種種特點(diǎn),使其成為嵌入式開發(fā)的首選,因此這里我們也選擇了Linux作為我們的嵌入式操作系統(tǒng)。4.開發(fā)工具選擇Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面(GUI)工具包,Qt應(yīng)用程序接口與工具兼容于所有支持平臺(tái),并且Qt中QtSql模塊實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫的完美支持,因此我們選擇了Qt作為我們的開發(fā)工具。5.數(shù)據(jù)庫系統(tǒng)選擇SQLite是一套非常強(qiáng)大的數(shù)據(jù)庫系統(tǒng),同時(shí)它還擁有開源、小巧等特點(diǎn),非常適合用到嵌入式開發(fā)中,因此我們選擇了SQLite數(shù)據(jù)庫系統(tǒng)。第二章宿主機(jī)開發(fā)環(huán)境的配置2.1開發(fā)環(huán)境方案宿主機(jī)嵌入式LINUX開發(fā)環(huán)境有如下方案:1.基于PC機(jī)WINDOWS操作系統(tǒng)下的CYGWIN;2.在WINDOWS下安裝虛擬機(jī)后,再在虛擬機(jī)中安裝LINXUX操作系統(tǒng);3.直接安裝LINUX操作系統(tǒng)。這里我們選擇第二種基于WINDOWS的虛擬機(jī)上的Linux開發(fā)環(huán)境。通常的嵌入式系統(tǒng)的軟件開發(fā)采用一種交叉編譯調(diào)試的方式。交叉編譯調(diào)試環(huán)境建立在宿主機(jī)上,對(duì)應(yīng)的開發(fā)板叫做目標(biāo)板。運(yùn)行Linux的PC開發(fā)時(shí)使用宿主機(jī)上的交叉編譯、匯編及連接工具形成可執(zhí)行的二進(jìn)制代碼,然后把可執(zhí)行文件下載到目標(biāo)機(jī)上運(yùn)行。調(diào)試時(shí)的方法很多,可以使用串口,以太網(wǎng)口等。宿主機(jī)和目標(biāo)板的處理器一般不相同,宿主機(jī)為Intel處理器,而目標(biāo)板如UP-TECHS2410/P270DVP開發(fā)板為三星S3c2410。GNU編譯器提供這樣的功能,在編譯器編譯時(shí)可以選擇開發(fā)所需的宿主機(jī)和目標(biāo)機(jī)從而建立開發(fā)環(huán)境。所以在進(jìn)行嵌入式開發(fā)前第一步的工作就是要安裝一臺(tái)裝有指定操作系統(tǒng)的PC機(jī)作宿主開發(fā)機(jī)。2.2宿主機(jī)Linux環(huán)境的搭建開發(fā)過程中所使用到的Linux操作系統(tǒng)是開發(fā)代號(hào)為L(zhǎng)ucidLynx的長(zhǎng)期支持版本:Ubuntu10.04。該系統(tǒng)繼承了前期Ubuntu版本的優(yōu)良特性,具有啟動(dòng)速度快,內(nèi)核新,軟件更新方便,具有強(qiáng)大的后備支持等諸多優(yōu)良特點(diǎn)。第三章硬件開發(fā)平臺(tái)及其操作系統(tǒng)的構(gòu)建3.1開發(fā)平臺(tái)的硬件資源1.核心板為S3C2410,配置2MNorFlashAM29LV160/320,硬件支持從NorFlash啟動(dòng)并可增加NandFlash容量。2.LCD和VGA接口,標(biāo)配8寸16bit真彩屏,同時(shí)預(yù)留一個(gè)24bit接口。擴(kuò)展了VGA接口和AV接口,可以連接VGA顯示器。3.AUDIO:CODEC采用UDA1341和UCB1400,二者根據(jù)核心板的不同由軟件設(shè)置CPLD邏輯進(jìn)行選擇,具有放音、錄音和線路輸入等功能。功放電路由LM386構(gòu)成,板載揚(yáng)聲器可播放音頻。3.2開發(fā)平臺(tái)的體系結(jié)構(gòu)圖3.1s3c3410體系結(jié)構(gòu)圖3.3開發(fā)平臺(tái)硬件間的工作流程圖3.2s3c3410工作流程圖3.4開發(fā)平臺(tái)操作系統(tǒng)的搭建3.4.1U-Boot的編譯1.U-Boot主要目錄結(jié)構(gòu)-board目標(biāo)板相關(guān)文件,主要包含SDRAM、FLASH驅(qū)動(dòng);-common獨(dú)立于處理器體系結(jié)構(gòu)的通用代碼,如內(nèi)存大小探測(cè)與故障檢測(cè);-cpu與處理器相關(guān)的文件。2.編譯U-boot首先運(yùn)行如下命令配置U-Boot:#makeup2410_config然后運(yùn)行make命令編譯:#make編譯成功之后會(huì)產(chǎn)生三個(gè)重要映象文件U-Boot1bin、U-Boot和U-Boot1srec文件。其中U-Boot是一個(gè)二進(jìn)制的源映像文件,U-Boot1bin是個(gè)elf格式的二進(jìn)制映像文件,將使用這個(gè)文件。3.4.2燒寫U-boot將燒寫軟件sjf2410和U-Boot1bin放在同一個(gè)目錄下,然后進(jìn)入DOS命令行模式,切換到所在目錄,輸入sjf2410-s.exe/f:u-boot.bin。選擇0:K9S1208prog→0:K9S1208Program。然后再入一次0,進(jìn)行燒寫。3.4.3內(nèi)核(kernel)的編譯與燒寫安裝內(nèi)核:把內(nèi)核源碼安裝/usr/src/linux子目錄中。cd/usr/src/linuxmakemrproper配置內(nèi)核,修改相關(guān)參數(shù)。字符界面下,makemenuconfig在內(nèi)核配置菜單中正確設(shè)置各內(nèi)核選項(xiàng),保存退出正確設(shè)置關(guān)聯(lián)文件make編譯內(nèi)核,用編譯U-Boot時(shí)在源代碼的tools目錄下生成的mkimage可執(zhí)行文件對(duì)前面編譯內(nèi)核時(shí)生成的zImage進(jìn)行處理,生成uImage以供U-Boot啟動(dòng)。使用內(nèi)核把uImage放入主機(jī)的TFTP目錄下,啟動(dòng)開發(fā)板,用U-Boot的tftp命令下載uImage到SDRAM,并啟動(dòng)。至此我們開發(fā)平臺(tái)的BOOT和操作系統(tǒng)搭建完成。第四章基于Qt/Embedded的嵌入式圖形系統(tǒng)4.1Qt概述Qt是Trolltech公司的標(biāo)志性產(chǎn)品(現(xiàn)Trolltech公司已被手機(jī)巨頭NOKIA公司收購),是一個(gè)跨平臺(tái)的C++圖形用戶界面(GUI)工具包,Qt應(yīng)用程序接口與工具兼容于所有支持平臺(tái),讓開發(fā)員們掌握一個(gè)應(yīng)用程序接口,便可執(zhí)行與平臺(tái)非相關(guān)的應(yīng)用開發(fā)與配置Qt/Windows(WindowsXP,2000,NT4,Me/98)Qt/Mac(MacOSX)Qt/X11(Linux,Solaris,HP-UX,IRIX,AIX等)Qt對(duì)不同平臺(tái)的專門API進(jìn)行了專門的封裝(文件處理,網(wǎng)絡(luò)等)。4.2Qt特征引入一種用于無縫對(duì)象通訊的被稱為信號(hào)和槽非常強(qiáng)大機(jī)制,可查詢和可設(shè)計(jì)的屬性,強(qiáng)大的事件和事件過濾器,根據(jù)上下文進(jìn)行國際化的字符串翻譯,完善的時(shí)間間隔驅(qū)動(dòng)的計(jì)時(shí)器使得在一個(gè)事件驅(qū)動(dòng)的圖形界面程序中很好地集成許多任務(wù)成為可能。以一種自然的方式組織對(duì)象所有權(quán)的分層次和可查詢的對(duì)象樹。被守護(hù)的指針,QGuardedPtr,當(dāng)參考對(duì)象被破壞時(shí),可以自動(dòng)地設(shè)置為無效,不像正常的C++指針在它們的對(duì)象被破壞的時(shí)候變成了“搖擺指針”。4.3Qt編程核心技術(shù)4.3.1元對(duì)象系統(tǒng)元對(duì)象系統(tǒng)是一個(gè)C++擴(kuò)展,使得QT更適合真正的組件GUI編程,使用元編譯器moc產(chǎn)生能被標(biāo)準(zhǔn)C++編譯器訪問的附加C++代碼,帶有moc預(yù)編譯器的C++基本上提供了面向?qū)ο蟮撵`活性,并保持了C++的執(zhí)行效率和擴(kuò)展性。4.3.2信號(hào)和插槽在Qt程序中,利用信號(hào)(signal)和插槽(slot)機(jī)制進(jìn)行對(duì)象間的通信。事件處理的方式也是回調(diào)。當(dāng)對(duì)象狀態(tài)發(fā)生改變的時(shí)候,發(fā)出signal通知所有的slot接收signal,盡管它并不知道哪些函數(shù)定義了slot,而slot也同樣不知道要接收怎樣的signal。signal和slot機(jī)制真正實(shí)現(xiàn)了封裝的概念,slot除了接收signal之外和其它的成員函數(shù)沒有什么不同,而且signal和slot之間也不是一一對(duì)應(yīng)的。4.3.3屬性屬性也是一個(gè)類的成員,在類聲明中用宏Q_PROPERTY來聲明,只能在繼承于QObject的子類中聲明,設(shè)置和得到屬性的成員函數(shù)如下:QObject::setProperty()QMetaObject::propertyNames()QMetaObject::property()4.3.4.QObject類QObject是Qt類體系的唯一基類,是Qt各種功能的源頭活水,就象MFC中的CObject和Dephi中的TObject。4.3.5對(duì)象樹QObject在對(duì)象樹中組織它們自己。當(dāng)你以另外一個(gè)對(duì)象作為父對(duì)象來創(chuàng)建一個(gè)QObject時(shí),它就被添加到父對(duì)象的children()列表中,并且當(dāng)父對(duì)象被刪除的時(shí)候,它也會(huì)被刪除。這種機(jī)制很好的適合了圖形用戶界面應(yīng)用對(duì)象的需要。4.3.6事件事件是由窗口系統(tǒng)或qt本身對(duì)各種事務(wù)的反應(yīng)而產(chǎn)生的。當(dāng)用戶按下、釋放一個(gè)鍵或鼠標(biāo)按鈕,一個(gè)鍵盤或鼠標(biāo)事件被產(chǎn)生;當(dāng)窗口第一次顯示,一個(gè)繪圖事件產(chǎn)生,從而告知最新的可見窗口需要重繪自身。大多數(shù)事件是由于響應(yīng)用戶的動(dòng)作而產(chǎn)生的,但還有一些,比如定時(shí)器等,是由系統(tǒng)獨(dú)立產(chǎn)生的。4.3.7.QApplication類QApplication類和QWidget類都是QObject類的子類.QApplication類負(fù)責(zé)GUI應(yīng)用程序的控制流和主要的設(shè)置,它包括主事件循環(huán)體,負(fù)責(zé)處理和調(diào)度所有來自窗口系統(tǒng)和其他資源的事件,并且處理應(yīng)用程序的開始、結(jié)束以及會(huì)話管理,還包括系統(tǒng)和應(yīng)用程序方面的設(shè)置。對(duì)于一個(gè)應(yīng)用程序來說,建立此類的對(duì)象是必不可少的。4.3.8QWidget類QWidget類是所有用戶接口對(duì)象的基類,它繼承了QObject類的屬性。組件是用戶界面的單元組成部分,它接收鼠標(biāo)、鍵盤和其它從窗口系統(tǒng)來的事件,并把它自己繪制在盤屏幕上。QWidget類有很多成員函數(shù),但一般不直接使用,而是通過子類繼承來使用其函數(shù)功能。如,QPushButton、QlistBox等都是它的子類。4.4QtCreator:跨平臺(tái)的QtIDEQtCreator是Qt被Nokia收購后推出的一款新的輕量級(jí)集成開發(fā)環(huán)境(IDE)。此IDE能夠跨平臺(tái)運(yùn)行,支持的系統(tǒng)包括Linux(32位及64位)、MacOSX以及Windows。QtCreator包含了一套用于創(chuàng)建和測(cè)試基于Qt應(yīng)用程序的高效工具,包括:一個(gè)高級(jí)的C++代碼編輯器、上下文感知、幫助系統(tǒng)、可視化調(diào)試器、源代碼管理、項(xiàng)目和構(gòu)建管理工具等。QtCreator的設(shè)計(jì)目標(biāo)是使開發(fā)人員能夠利用Qt這個(gè)應(yīng)用程序框架更加快速及輕易的完成開發(fā)任務(wù)。4.5Qt/Embedded簡(jiǎn)介Qt/Embedded(簡(jiǎn)稱QtE)是一個(gè)專門為嵌入式系統(tǒng)設(shè)計(jì)圖形用戶界面的工具包。使用QtE,開發(fā)者可以:用QtE開發(fā)的應(yīng)用程序要移植到不同平臺(tái)時(shí),只需要重新編譯代碼,而不需要對(duì)代碼進(jìn)行修改??梢噪S意設(shè)置程序界面的外觀??梢苑奖愕貫槌绦蜻B接數(shù)據(jù)庫。可以使程序本地化??梢詫⒊绦蚺cJava集成。嵌入式系統(tǒng)地要求是小而快速,而QtE就能幫助開發(fā)者為滿足這些要求開發(fā)強(qiáng)壯地應(yīng)用程序。QtE是模塊化和可裁剪地。開發(fā)者可以選取他所需要的一些特性,而裁剪掉所不需要的。這樣,通過選擇所需要的特性,QtE的映像變得很小,最小只有600K左右。QtE由于平臺(tái)無關(guān)性和提供了很好的Gui編程接口,在許多嵌入式系統(tǒng)中得到了廣泛的應(yīng)用,是一個(gè)成功的嵌入式GUI產(chǎn)品。4.6建立Qt/Embedded開發(fā)環(huán)境4.6.1準(zhǔn)備工作在/usr/local目錄下新建一個(gè)名字為QT的目錄,然后將要用到的文件包arm-linux-gcc-3.4.6-glibc-2.3.6.tar.bz2、qt-everywhere-opensource-src-4.6.3.tar.gz(適用于QT-X11和QT/E)、tslib-1.4.tar.bz2以及QtCreator的安裝包qt-sdk-linux-x86-opensource-2010.04.bin(軟件開發(fā)工具包,包含QT-X11和QtCreator)放到新建的QT目錄中。4.6.2安裝交叉編譯器在終端中執(zhí)行如下操作:#cd/usr/local/QT#tarxvzfarm-linux-gcc-4.3.2.tgz–C/usr/local/執(zhí)行該命令,將把a(bǔ)rm-linux-gcc3.4.6安裝到/usr/local/gcc-3.4.6-glibc-2.3.6/arm-linux/目錄。然后,將交叉編譯器的環(huán)境變量設(shè)置為:PATH=/usr/local/gcc-3.4.6-glibc-2.3.6/arm-linux/bin:$PATH,在終端中進(jìn)行以下操作:exportPATH=/usr/local/arm/4.3.2/bin:$PATH這樣就把交叉編譯器的環(huán)境變量設(shè)置好了。4.6.3安裝qt-sdk-linux-x86-opensource-2010.04.bin開發(fā)工具包1.安裝QT-X11的開發(fā)工具包qt-sdk-linux-x86-opensource-2010.04.bin安裝完成后可以產(chǎn)生Qt開發(fā)工具,如QtCreator、designer、qvfb等,嵌入式的開發(fā)有了qvfb,就可以不需要實(shí)際的開發(fā)板,也可以開發(fā)Qt應(yīng)程序。首先進(jìn)入軟件包的存放目錄,然后在終端中執(zhí)行以下命令:#chmod+xqt-sdk-linux-x86-opensource-2010.04.bin./qt-sdk-linux-x86-opensource-2010.04.bin默認(rèn)的安裝路徑為/opt/qtsdk-2010.04,這樣我們的開發(fā)工具包就安裝成功了。2.設(shè)置環(huán)境變量在~/.profile文件的最后添加如下語句:exportQTDIR=$PATH:/opt/qtsdk-2010.04/qtexportPATH=$PATH:/opt/qtsdk-2010.04/qt/bin使環(huán)境變量立即起效:Source~/.profile至此我們的QtCreator以及其他QT-X11的開發(fā)工具安裝成功。4.6.4編譯及安裝QT/E4.6.3-x86和QT/E4.6.3-arm1.解壓QT文件包將/usr/local/QT目錄下的qt-everywhere-opensource-src-4.6.3.tar.gz解壓兩次,分別重命名為QT/E4.6.3-x86和QT/E4.6.3-arm。這里,qt-everywhere-opensource-src-4.6.3有兩個(gè)復(fù)制:QT/E4.6.3-x86和QT/E4.6.3-arm,根據(jù)他們的名字可以知道前者是適合x架構(gòu)的,后者適合arm架構(gòu),如果有開發(fā)板的話,可以只編譯qt-everywhere版本成arm架構(gòu)的就可以了,但是很多時(shí)候用qvfb的話,開發(fā)會(huì)方便很多,所以多編譯一個(gè)x86架構(gòu)的。QT/E4.6.3-arm版本只能在嵌入式板子上面運(yùn)行,編譯成x86架構(gòu)的程序也只能在x86的嵌入式板子上跑。前面說過,我們需要qvfb來測(cè)試開發(fā)程序,但是qvfb只能執(zhí)行x86架構(gòu)的應(yīng)用程序,所以需要讓QT/E4.6.3-x86生成關(guān)于x86的庫和其他文件。最終的qt應(yīng)用程序需要在arm架構(gòu)上面運(yùn)行,需要這方面的庫,所以還需要編譯應(yīng)用arm的。2.解壓及編譯觸摸屏軟件tslib1.4.tar.bz2打開文件所在目錄:cd/usr/local/QT,解壓:tarxjvftslib-1.4.tar.bz2,進(jìn)入解壓目錄:cdtslib-1.4,修改腳本:geditbuild.sh,為: #/bin/shexportCC=arm-linux-gcc./autogen.shecho"ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache./configure--host=arm-linux--cache-file=arm-linux.cache-prefix=/usr/local/tslibmakemakeinstall執(zhí)行:./build.sh,成功安裝到了/usr/local/tslib目錄下,至此tslib1.4編譯成功。3.編譯及安裝QT/E4.6.3-x86進(jìn)入/usr/local/QT/QT/E4.6.3-x86目錄,進(jìn)行編譯安裝。在終端中進(jìn)行如下操作:#cd/usr/local/QT/QT/E4.6.3-x86#./configure-prefix/usr/local/QT/E4.6.3-x86-embeddedx86-qvfb#make#makeinstall安裝編譯過程大概需要4個(gè)小時(shí),具體時(shí)間得看機(jī)器的配置,完成后QT/E4.6.3-x86被成功安裝在了/usr/local/QT/E4.6.3-x86目錄下。4.編譯及安裝QT/E4.6.3-arm進(jìn)入/usr/local/QT/QT/E4.6.3-arm目錄,首先修改src/3rdparty/freetype/include/freetype/config/ftconfig.h文件,將第330行修改為:"orr%0,%0,%2,lsl#16\n\t"/*%0|=%2<<16*/。修改完成后開始配置configure,具體命令為:#./configure-qt-kbd-tty-qt-gfx-linuxfb-no-gfx-transformed-no-gfx-multiscreen-qt-mouse-pc-no-gfx-qvfb-no-gfx-vnc-qt-kbd-tty-qt-gfx-linuxfb-no-gfx-qvfb-no-gfx-vnc-qt-mouse-tslib-no-glib-prefix/usr/local/QT/E4.6.3-arm-embeddedarm-release-shared-fast-no-largefile-qt-sql-sqlite-no-qt3support-no-xmlpatterns-no-mmx-no-3dnow-no-sse-no-sse2-no-svg-no-webkit-qt-zlib-qt-gif-qt-libtiff-qt-libpng-qt-libmng-qt-libjpeg-makelibs-nomaketools-nomakeexamples-nomakedocs-nomakedemo-no-nis-no-cups-no-iconv-no-dbus-no-openssl-xplatformqws/linux-arm-g++-little-endian-qt-freetype-depths16,18-I/usr/local/tslib/include-L/usr/local/tslib/lib-v-D__ARM_ARCH_5TEJ__命令寫好后按下回車,然后再輸入O回車、輸入yes回車,然后configure就開始配置生成Makefile,配置成功后會(huì)有一個(gè)提示,然后就可以根據(jù)系統(tǒng)的提示進(jìn)行編譯安裝了,具體命令為:#make#makeinstall5.環(huán)境變量的設(shè)置由于我們有兩種不同架構(gòu)的QT/E,為了使用方便不與混淆,所以我們使用腳本設(shè)置環(huán)境變量的方法。(1)QT/E4.6.3-x86環(huán)境變量設(shè)置QTEDIR=/usr/local/QT/E4.6.3-x86PATH=/usr/local/QT/E4.6.3-x86/bin:$PATHLD_LIBRARY_PATH=/usr/local/QT/E4.6.3-x86/lib:$LD_LIBRARY_PATH(2)QT/E4.6.3-arm環(huán)境變量設(shè)置QTEDIR=/usr/local/QT/E4.6.3-armPATH=/usr/local/QT/E4.6.3-arm/bin:$PATHLD_LIBRARY_PATH=/usr/local/QT/E4.6.3-arm/lib:$LD_LIBRARY_PATH至此QT/E開發(fā)環(huán)境的建立全部成功。第五章KTV點(diǎn)播系統(tǒng)設(shè)計(jì)5.1SQLite數(shù)據(jù)庫數(shù)據(jù)庫幾乎是每個(gè)較大的軟件所必須應(yīng)用的,而在Qt中也使用QtSql模塊實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫的完美支持。5.1.1SQLite數(shù)據(jù)庫簡(jiǎn)介SQLite顧名思議是以SQL為基礎(chǔ)的數(shù)據(jù)庫軟件,SQL是一套強(qiáng)大的數(shù)據(jù)庫語言,主要概念是由數(shù)據(jù)庫、資料表(table)、查詢指令(queries)等單元組成的關(guān)聯(lián)性數(shù)據(jù)庫。因?yàn)镾QL的查詢功能強(qiáng)大,語法一致而入門容易,因此成為現(xiàn)今主流數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。5.1.2SQLite數(shù)據(jù)庫的操作啟動(dòng)sqlite3程序,僅僅需要敲入帶有SQLite數(shù)據(jù)庫名字的"sqlite3"命令即可。如果文件不存在,則創(chuàng)建一個(gè)新的(數(shù)據(jù)庫)文件。然后sqlite3程序?qū)⑻崾灸爿斎隨QL。敲入SQL語句(以分號(hào)“;”結(jié)束),敲回車鍵之后,SQL語句就會(huì)執(zhí)行?,F(xiàn)在在Linux的終端下建立KTV音樂點(diǎn)播系統(tǒng)所需的數(shù)據(jù)庫。sqlite>createtablesong(歌名vchar,歌手vchar);sqlite>createtableplaylist(歌名vchar,歌手vchar);sqlite>insertintosongvalues('逍遙嘆','胡歌');如表5.1所示,表song中存放了我們KTV點(diǎn)播系統(tǒng)所需的歌曲名稱以及對(duì)應(yīng)的歌手名稱等信息,表playlist則為空,作用是為了我們的系統(tǒng)運(yùn)行后存放用戶所點(diǎn)播的歌曲信息。這些數(shù)據(jù)都存放在ktv.db文件中(如表5.2所示為數(shù)據(jù)字典),程序運(yùn)行后就可以通過相應(yīng)的SQL語言來操作這個(gè)數(shù)據(jù)庫文件,達(dá)到數(shù)據(jù)的讀取和存放的目的。表5.1song和playlist數(shù)據(jù)表模型序號(hào)歌名歌手1逍遙嘆胡歌表5.2數(shù)據(jù)字典字段名類型功能序號(hào)Int系統(tǒng)編號(hào)歌名vchar查詢關(guān)鍵字歌手vchar歌手姓名5.1.3Qt程序中對(duì)SQLite的操作在使用QT編程中同樣可以使用QT的機(jī)制來操作SQLite數(shù)據(jù)庫,以下QT的語句就實(shí)現(xiàn)了同前面在命令行中操作一樣的效果:staticboolcreateConnection(){//創(chuàng)建數(shù)據(jù)庫鏈接函數(shù)QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("ktv.db");if(!db.open())returnfalse;QSqlQueryquery;query.exec(QObject::tr("createtablesong(歌名vchar,歌手vchar)"));……returntrue;}其中QSqlDatabase類實(shí)現(xiàn)了數(shù)據(jù)庫連接的操作,QSqlQuery類用來執(zhí)行SQL語句。5.2使用QtCreator進(jìn)行系統(tǒng)開發(fā)5.2.1熟悉QtCreatorIDEQt應(yīng)用程序除了使用手工編寫代碼的方式外,還可以用過QtCreator來完成,QtCreator的功能十分強(qiáng)大,而且還提供了大量可供編程使用的組件。如圖5.1所示是在Linux環(huán)境下打開后的第一屏顯示的主界面,通過這個(gè)界面我們可以對(duì)QtCreator的開發(fā)環(huán)境有一個(gè)大概的了解,下面我們就使用它來開發(fā)我們的KTV點(diǎn)播系統(tǒng)。圖5.1QtCreator主界面5.2.2使用QtCreator建立工程打開QtCreator,然后在點(diǎn)擊File菜單選中子菜單項(xiàng)中的第一個(gè)NewFileorProject進(jìn)行創(chuàng)建工程,工程文件以及其他代碼文件都放在了你所指定的路徑下。5.2.3設(shè)計(jì)界面使用QtCreator完成工程的創(chuàng)建后首先是設(shè)計(jì)界面,如圖5.2所示為系統(tǒng)的界面,界面中包括了TableView、PushButton、LineEdit、Lable等部件。圖5.2系統(tǒng)主界面5.2.4程序代碼的編寫程序中用到了SQLite數(shù)據(jù)庫,所以首先需要?jiǎng)?chuàng)建一個(gè)關(guān)于數(shù)據(jù)庫的創(chuàng)建和鏈接的頭文件,文件名為database.h,然后將源文件修改為以下內(nèi)容:staticboolcreateConnection(){//創(chuàng)建數(shù)據(jù)庫鏈接函數(shù)QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("ktv.db");if(!db.open())returnfalse;QSqlQueryquery;query.exec(QObject::tr("createtablesong(歌名vchar,歌手vchar)"));……returntrue;}內(nèi)容修改完成后,打開工程文件在文件的最后添加一行關(guān)于使用數(shù)據(jù)庫的聲明,內(nèi)容如下:QT+=sql最后是對(duì)程序的構(gòu)造以及功能的實(shí)現(xiàn)做工作,這一步是最麻煩也是最費(fèi)時(shí)間的一步,首先是編寫構(gòu)造函數(shù)、然后是析構(gòu)函數(shù)、最后各個(gè)信號(hào)與槽的鏈接以及實(shí)現(xiàn)代碼的編寫,至此代碼的初步編寫工作完成。5.2.5程序調(diào)試以及修改界面設(shè)計(jì)、代碼編寫完成后,就需要對(duì)程序進(jìn)行功能調(diào)試以及修改,這一步也是非常的費(fèi)時(shí)間中間可能還會(huì)牽扯到一些技術(shù)難題,所以在這一步一定要仔細(xì)認(rèn)真,如圖5.3所示為系統(tǒng)運(yùn)行后的主界面。圖5.3系統(tǒng)運(yùn)行后的主界面5.2.6KTV點(diǎn)播系統(tǒng)的功能測(cè)試打開主界面后,點(diǎn)擊你想要聽的歌曲(這里我們選擇逍遙嘆)系統(tǒng)就會(huì)自動(dòng)將歌曲添加到已選列表內(nèi)并且開始自動(dòng)播放,如圖5.4所示正在播放所選的歌曲。圖5.4播放選擇的歌曲如果我們不想K當(dāng)前的歌曲,就可以點(diǎn)擊關(guān)閉播放按鈕關(guān)閉當(dāng)前的播放,然后我們還可以刪除已選列表中的歌曲重新添加,這里我們刪除逍遙嘆并重新添加喜歡的歌曲,然后單擊播放列表按鈕就開始了播放,我們就可以享受K歌帶來的樂趣了,如圖5.5所示。圖5.5播放列表中的歌曲用戶添加的列表可以循環(huán)播放,直到用戶刪除重新添加。另外在播放的過程中用戶如果想更換列表中的其他歌曲只需要雙擊想要聽的歌曲即可,這里我們將歌曲更改為守護(hù)者,如圖5.6所示。圖5.6更改正在播放的歌曲最后還有一個(gè)重要的功能就是可以實(shí)現(xiàn)手工輸入歌曲名實(shí)現(xiàn)查找,這個(gè)功能能夠方便用戶快速找到喜歡的歌曲,不在尋找中浪費(fèi)時(shí)間,而是把更多的時(shí)間用到欣賞歌曲上,比如這里我們想要聽星月神話,我們就可以在輸入歌曲名的后面的文本框中輸入星月神話,然后點(diǎn)擊查找,如圖5.7所示。圖5.7系統(tǒng)的查找功能這樣我們就可以將查找到的歌曲加入已選列表播放了,最后需要說明的是在我們的系統(tǒng)運(yùn)行過程中MV的視屏就可以通過雙擊播放器的標(biāo)題欄進(jìn)入全屏欣賞模式。最后如果我們想關(guān)閉系統(tǒng)就可以直接點(diǎn)擊主界面上的推出按鈕就可以快速的退出系統(tǒng)了,我上面的測(cè)試只是程序大概的運(yùn)行情況以及各種功能的介紹,同時(shí)我們的程序功能測(cè)試也完成了。雖然我們的系統(tǒng)功能很簡(jiǎn)單而且界面也不怎么美觀,同時(shí)也是本著操作簡(jiǎn)單、方便相結(jié)合的原則而設(shè)計(jì)的。但是我們會(huì)不斷的去努力,去學(xué)習(xí),同時(shí)通過參加這次大賽讓我們每一個(gè)參賽隊(duì)員都對(duì)嵌入式有了一個(gè)新的認(rèn)識(shí),并且同時(shí)也學(xué)到了很多東西,在此非常的感謝博創(chuàng)公司給我們提供的這一個(gè)交流學(xué)習(xí)的平臺(tái),同時(shí)我們也要感謝我們的指導(dǎo)老師每天辛苦的陪著我們給我們指導(dǎo)、幫助以及支持。5.3MPlayer播放器5.3.1MPlayer簡(jiǎn)介MPlayer是Linux上的電影播放器,它的功能十分強(qiáng)大,能夠播放眾多格式的文件,在X86PC機(jī)上運(yùn)行很穩(wěn)定,也可以把它移植到非X86CPU上的嵌入式系統(tǒng)中來。5.3.2MPlayer播放器的架構(gòu)MPlayer播放器分為4層:輸入層、分流層、解碼層、輸出層。輸入層(inputlayer):該層包含讀取媒體文件模塊,該模塊將媒體文件的媒體數(shù)據(jù)按流的方式讀入,并存放于數(shù)據(jù)緩沖區(qū),通過解析文件頭來判斷該數(shù)據(jù)流屬于何種音頻、視頻格式的文件。MPlayer的邏輯結(jié)構(gòu)圖分流層:包含分流器功能模塊,該模塊MPlayer邏輯結(jié)構(gòu)分為通過分析文件頭來判斷音頻和視頻在該段數(shù)據(jù)中的位置,然后對(duì)其進(jìn)行音、視頻分離,存入各自的緩沖區(qū)。同時(shí),提取時(shí)間戳(PTS,Presentationtimestamp),通過控制時(shí)間戳可以實(shí)現(xiàn)音頻和視頻的同步。解碼層:該層包含音、視頻的解碼模塊和解碼器選擇模塊。第六章系統(tǒng)的移植與集成6.1移植QT/E4.6.3以及tslib1.4到開發(fā)板由于我們的程序是基于QT開發(fā)的,所以在程序運(yùn)行之前需要先將QT/E移植到開發(fā)板上,搭建程序運(yùn)行需要的平臺(tái)。復(fù)制程序運(yùn)行需要用到的庫文件,拷貝庫完成后,對(duì)于有些庫文件,可以裁剪一下,最后
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)新紀(jì)元模板
- 三年級(jí)安全教育行動(dòng)
- 《電梯安全基礎(chǔ)知識(shí)》課件
- 脫敏技術(shù)風(fēng)險(xiǎn)評(píng)估-洞察分析
- 問題解決邊緣計(jì)算研究-洞察分析
- 鴨產(chǎn)業(yè)鏈風(fēng)險(xiǎn)評(píng)估與管理-洞察分析
- 香蕉等水果跨境電商發(fā)展機(jī)遇-洞察分析
- 血栓動(dòng)物模型病理分析-洞察分析
- 虛擬現(xiàn)實(shí)在移動(dòng)應(yīng)用中的應(yīng)用-洞察分析
- 細(xì)胞周期檢查點(diǎn)在衰老和再生中的作用-洞察分析
- 火力發(fā)電廠有關(guān)職業(yè)病的危害及防護(hù)
- 民主測(cè)評(píng)票(三種樣式)
- 班車安全檢查表(2015-7-14)V3 0 (2)
- 城投集團(tuán)年度安全管理工作計(jì)劃
- 一、 行業(yè)協(xié)會(huì)申請(qǐng)?jiān)O(shè)立分支機(jī)構(gòu)、代表機(jī)構(gòu)應(yīng)提交的文件:
- 幼兒園幼兒園理事會(huì)成員一覽表
- 學(xué)生對(duì)課堂教學(xué)滿意度調(diào)查
- 住房公積金中心窗口人員個(gè)人工作總結(jié)
- 集成電路單粒子效應(yīng)評(píng)估技術(shù)研究PPT課件
- 幼兒園小班生成活動(dòng)教案20篇
- 講師與平臺(tái)的合作協(xié)議
評(píng)論
0/150
提交評(píng)論