畢業(yè)設(shè)計基于處理器SC22410的手持終端觸摸屏的設(shè)計_第1頁
畢業(yè)設(shè)計基于處理器SC22410的手持終端觸摸屏的設(shè)計_第2頁
畢業(yè)設(shè)計基于處理器SC22410的手持終端觸摸屏的設(shè)計_第3頁
畢業(yè)設(shè)計基于處理器SC22410的手持終端觸摸屏的設(shè)計_第4頁
畢業(yè)設(shè)計基于處理器SC22410的手持終端觸摸屏的設(shè)計_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、摘 要隨著嵌入式技術(shù)在智能手機、PDA等手持終端設(shè)備的應(yīng)用越來越廣泛,觸摸屏作為一種終端輸入設(shè)備,具有節(jié)省空間、操作簡單、反應(yīng)速度快等優(yōu)點,非常適用作手持終端等嵌入式系統(tǒng)的輸入設(shè)備。S3C2410是一款具有ARM920T內(nèi)核的16/32位微處理器。作為新一代嵌入式平臺的核心,ARM9采用5級流水線,使用大量寄存器,并支持協(xié)處理器和片上調(diào)試,以指令執(zhí)行速度快,尋址方式靈活簡單,執(zhí)行效率高為優(yōu)勢,在工業(yè)控制、無線通訊、消費類電子產(chǎn)品、成像和安全產(chǎn)品等各個領(lǐng)域得到了廣泛的應(yīng)用。嵌入式Linux是在開放源代碼Linux的基礎(chǔ)上發(fā)展起來的,內(nèi)核精簡,內(nèi)存管理功能強大,支持多任務(wù),以設(shè)備驅(qū)動程序的方式提供

2、統(tǒng)一的外設(shè)接口。因此Linux是嵌入式操作系統(tǒng)的最佳選擇。Qt/Embedded是一個專門為嵌入式系統(tǒng)提供圖形界面的用戶系統(tǒng),提供了豐富的窗口小部件,支持窗口部件的定制,而且內(nèi)存消耗少。本文介紹了基于S3C2410處理器平臺,以嵌入式Linux 操作系統(tǒng)和Qt/Embedded為接口的LCD觸摸屏操作界面的設(shè)計。該方案可運用于高檔汽車GPS巡航系統(tǒng)、工程機械安全儀表和電能質(zhì)量監(jiān)測儀等實際工程應(yīng)用中。關(guān)鍵詞: 觸摸屏;嵌入式Linux;ARM;Qtopia移植TitleRealization of the Hand-hold Terminals Touch Screenbased on the

3、S3C2410 ProcessorAbstractWith the application of embedded technology in smart phones, PDA and other hand-hold terminal equipments is increasingly extensive. As an input device of terminal equipment, the Touch screen has the advantages of space saving, simple operation, fast response, is very suitabl

4、e as the input equipment of the hand-hold terminals and other embedded systems.S3C2410 is one 16/32-bit microprocessor with ARM920T core. As the core of the new generation of the embedded platform, ARM9 uses 5 levels of assembly lines and massive registers, supporting the cooperated processor and de

5、bugging online, has the advantage of carries out the instruction quickly and efficiently. It is widely applied in the industry control, the wireless communication, the expense class electronic products, the imagery and the security product and so on. The embedded Linux developed from the open source

6、 code Linux, It has simply core and the function of strongly managing the memory, support the multi-duties. It provides the general interface in the way of device drivers. Therefore the Embedded Linux was considered as one of the most superiorchoices in the current embedded operating systems.Qt/Embe

7、dded is the system that provides the graphical user interface special used in the embedded system. It integrates a lot of small window parts, supports the custom-made window and consumes memory fewer.This paper introduced the realization of the operation of the touch screen, which in the foundation

8、of the Embedded Linux operation system and the S3C2410 processor, is designed by Qt/Embedded .This plan may utilize to the upscale automobile GPS cruise system, the project mechanical security meter and the electrical energy quality monitor meter and so on. Keywords: Touch Screen; Embedded Linux; AR

9、M; Qtopia Porting目 次1 引言12 硬件平臺22.1 ARM體系結(jié)構(gòu)22.2 S3C2410處理器簡介22.3 觸摸屏接口電路33 交叉編譯環(huán)境的建立73.1 Linux交叉編譯環(huán)境簡介73.2 開發(fā)環(huán)境的配置73.3 開發(fā)工具的安裝84 基于Qt的圖形用戶界面設(shè)計104.1 Qt體系結(jié)構(gòu)104.2 Qt環(huán)境的建立124.3 Qt Designer的使用154.4 Qtopia虛擬平臺建立164.5 Qtopia的移植175 觸摸屏圖形操作界面的實現(xiàn)195.1 Linux設(shè)備驅(qū)動程序195.2 觸摸屏驅(qū)動程序分析225.3 Qt/Eembedded中的觸摸屏驅(qū)動接口285.4

10、 Qt/Embedded的觸摸屏驅(qū)動接口的設(shè)置305.5 驅(qū)動程序調(diào)試過程中出現(xiàn)的問題31結(jié) 論34致 謝35參 考 文 獻36附錄A 觸摸屏驅(qū)動部分源程序371 引言嵌入式系統(tǒng)就是以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ),軟、硬件可裁剪,對功能可靠性、成本、體積和功耗等嚴格要求的專用計算機系統(tǒng)1。隨著嵌入式技術(shù)的發(fā)展,手持終端設(shè)備的應(yīng)用越來越廣泛,如智能手機、警務(wù)通、手持抄表系統(tǒng)等。由于手持終端對體積要求很嚴格,而觸摸屏作為一種實用的電腦輸入設(shè)備,具有節(jié)省空間、堅固耐用、反應(yīng)速度快、易于交流等優(yōu)點,非常適合用作手持終端設(shè)備的輸入設(shè)備。Linux操作系統(tǒng)因開放源碼、便于裁剪,是當前嵌入式操作系統(tǒng)的主要

11、選擇。ARM9作為新一代嵌入式平臺,憑借其強大的功能與良好的設(shè)備支持在數(shù)據(jù)通信、多媒體顯示和手持終端設(shè)備等領(lǐng)域得到了廣泛的應(yīng)用。因此作為與用戶交互的終端媒介,如何在以ARM9為核心的系統(tǒng)中集成觸摸屏模塊以及在嵌入式Linux操作系統(tǒng)中實現(xiàn)其驅(qū)動程序,是一個非常值得去研究和解決的課題。ARM9微處理器作為新一代嵌入式平臺,它采用5級流水線,使用大量寄存器,并支持協(xié)處理器和片上調(diào)試,以指令執(zhí)行速度快,尋址方式靈活簡單,執(zhí)行效率高為優(yōu)點2,14。在工業(yè)控制、無線通訊、消費類電子產(chǎn)品、成像和安全產(chǎn)品等各個領(lǐng)域得到了廣泛的應(yīng)用。嵌入式Linux是在開放源代碼的Linux基礎(chǔ)上發(fā)展起來的,它內(nèi)核精簡,可移

12、植性強,內(nèi)存管理功能強大;支持多任務(wù);以設(shè)備驅(qū)動程序的方式提供統(tǒng)一的外設(shè)接口3,4。因此Linux是嵌入式平臺上操作系統(tǒng)的最佳選擇。Qtopia是在基于Qt的嵌入式版本Qt/Embedded庫的基礎(chǔ)上,專門針對PDA、SmartPhone這類運行嵌入式Linux的移動計算設(shè)備和手持終端所開發(fā)的開放源碼的一套應(yīng)用程序包和開發(fā)庫5。它是用Qt/Embedded程序庫編寫的應(yīng)用程序環(huán)境,界面優(yōu)美,主要應(yīng)用于高端手機、PDA等手持設(shè)備,具有廣闊的發(fā)展前景。 在本次畢業(yè)設(shè)計中,以博創(chuàng)科技嵌入式教學科研UP-NETARM2410-S開發(fā)板為硬件平臺,實現(xiàn)基于S3C2410處理器的嵌入式LINUX內(nèi)核的編譯

13、與移植,開發(fā)基于Qt的人機友好LCD觸摸屏操作界面,并在S3C2410處理器上完成Qtopia的移植。2硬件平臺2.1 ARM體系結(jié)構(gòu)及應(yīng)用ARM9微處理器作為新一代嵌入式平臺,它采用5級流水線,支持Thumb/ARM雙指令集,能很好地兼容8位/16位器件;大量使用寄存器,指令執(zhí)行速度快;尋址方式靈活簡單,執(zhí)行效率高;支持協(xié)處理器和片上調(diào)試。到目前為止,ARM微處理器及技術(shù)已經(jīng)深入到各個領(lǐng)域。作為32位的RISC架構(gòu),基于ARM內(nèi)核的為控制器芯片不但占據(jù)了微控制器市場的大部分市場份額,同時也逐漸向低端微控制器應(yīng)用領(lǐng)域擴展,ARM微處理器的低功耗、高性價比,向傳統(tǒng)的8位/16位微控制器提出了挑戰(zhàn)

14、。目前已有超過85的無線通訊設(shè)備采用了ARM技術(shù),手機中的32位SIM智能卡也采用了ARM技術(shù)5,ARM以其高性能和低成本,在該領(lǐng)域的地位日益鞏固。隨著寬帶技術(shù)的推廣,采用ARM技術(shù)的ASDL芯片正逐漸獲得競爭優(yōu)勢。此外,ARM在語音及視頻處理上進行了優(yōu)化。并獲得了廣泛支持,也對DSP的應(yīng)用領(lǐng)域提出了挑戰(zhàn)。2.2S3C2410處理器簡介S3C2410處理器是一款基于ARM920T內(nèi)核的16/32位RISC嵌入式處理器,主要面向手持設(shè)備、移動通信等應(yīng)用領(lǐng)域。它集成了大量的功能單元:(1)1.8V ARM920T內(nèi)核,1.8V/2.5V/3.3V存儲系統(tǒng),帶有3.3V16KB指令和16KB數(shù)據(jù)緩存

15、及MMU單元的外部O接口的微處理器;(2)外部存儲器控制(SDRAM控制和芯片選擇邏輯);(3)LCD控制器(支持4K顏色的STN或256K色TFT的LCD),帶有1個通道的LCD專用DMA控制器;(4)4通道DMA,具有外部請求引腳;(5)3通道UART(支持IrDA1.0,16字節(jié)發(fā)送FIFO及16字節(jié)接收FIFO)/2通道SPI接口;(6)1個通道多主IIC總線控制器/1通道IIS總線控制器;(7)2個主機接口的USB口/1個設(shè)備USB口(1.1版本);(8)4通道PWM定時器/1通道內(nèi)部計時器;(9)117位通用目的I/O口/24通道外部中斷源;(10)帶觸摸屏接口的8通道10位ADC

16、;等等。該平臺提供了系統(tǒng)級的硬件和軟件二次開發(fā),并且能夠很方便地在該平臺上進行相關(guān)的功能擴展,以及進行所需的產(chǎn)品設(shè)計。此次畢業(yè)設(shè)計中主要用到S3C2410中ADC和觸摸屏接口模塊。2.3 觸摸屏接口電路2.3.1觸摸屏分類觸摸屏按其工作原理的不同分為五種:矢量壓力傳感技術(shù)觸摸屏、電阻式觸摸屏、電容式觸摸屏、紅外線技術(shù)觸摸屏、表面聲波技術(shù)觸摸屏6。紅外線觸摸屏屏價格低廉,但其外框易碎,容易產(chǎn)生光干擾,曲面情況下失真;電容屏設(shè)計理論好,但其圖像失真問題很難得到根本解決;表面聲波觸摸屏清晰抗暴,適于各種場合,缺憾是屏表面的水滴、塵土會使觸摸屏變地遲鈍,甚至不工作;電阻式觸摸屏結(jié)構(gòu)簡單,成本低廉,透光

17、效果好,工作環(huán)境和外界完全隔離,不怕灰塵和水汽,并且穩(wěn)定性高。因此,在實際應(yīng)用中使用電阻式觸摸屏較多。2.3.2電阻式觸摸屏的工作原理電阻式觸摸屏又可分為四線式和五線式兩種。它們在制作工藝上基本相同,都由4層透明薄膜構(gòu)成,最下面是玻璃或有機玻璃構(gòu)成的基層,最上面是一層外表面經(jīng)過硬化處理從而光滑防刮的塑料層,附著在上下兩層內(nèi)表面的兩層為金屬導電層(O T I,氧化銦),這兩層由細小的透明隔離點進行絕緣。當手指觸摸屏幕時,兩個導電層在觸摸點處接觸。觸摸層的兩個金屬導電層分別用來測量x 軸和y 軸方向的坐標。用于x 坐標測量的導電層從左右兩端引出兩個電極,記為X+ 和X-。用于y 坐標測量的導電層從

18、上下兩端引出兩個電極,記為Y+和Y-。這就是四線電阻式觸摸屏的引線構(gòu)成。其簡單等效電路如圖2.1所示。電阻式觸摸屏工作的實質(zhì)是對X、Y兩個方向電阻分壓的測量。當手指或筆觸摸屏幕時,平時相互絕緣的兩導電層就在觸摸點位置接觸,因其中一面導電層(頂層)接通X軸方向的5V均勻電壓場,使得檢測層(底層)的電壓由零變?yōu)榉橇悖刂破鱾蓽y到這個接通后,進行A/D轉(zhuǎn)換,并將得到的電壓值與5V相比即可得觸摸點的X軸坐標為:Xi=Lx×(Vi / V)同理可獲得觸點的Y軸坐標7。觸摸屏 X+Y+X-Y-圖2.1 觸摸屏簡單等效電路兩種接口方式觸摸屏和S3C2410處理器的接口方式有兩種:使用S3C2410

19、處理器內(nèi)部的觸摸屏控制器和使用專門的觸摸屏接口芯片。(1)使用S3C2410處理器內(nèi)部的觸摸屏控制器可以直接將相關(guān)的引腳設(shè)置為觸摸屏功能引腳,和觸摸屏直接相連。S3C2410處理器集成了8通道模擬輸入的10位A/D轉(zhuǎn)換器。它將輸入的模擬信號轉(zhuǎn)換為10位的二進制數(shù)字代碼。在2.5MHz的A/D轉(zhuǎn)換器時鐘下,最大轉(zhuǎn)換速率可達到500KSPS。A/D轉(zhuǎn)換器支持片上采樣和保持功能,并支持掉電模式。S3C2410處理器的引腳AIN7和AIN5用于連接觸摸屏的模擬信號輸入。觸摸屏接口電路一般由觸摸屏、4個外部晶體管和一個外部電源組成。如圖2.2所示。觸摸屏接口的控制和選擇信號(nYPON,YMON,nXP

20、ON和XMON)連接切換X坐標和Y坐標轉(zhuǎn)換的外部晶體管。模擬輸入引腳(AIN5,AIN7)則連接到觸摸屏引腳。觸摸屏控制接口包括一個外部晶體管控制邏輯和具有中斷產(chǎn)生邏輯的ADC接口邏輯,其特性如下:分辨率:10位;微分線性度誤差:1.0 LSB;積分線性度誤差:2.0 LSB;最大轉(zhuǎn)換速率:500 KSPS;低功耗;供電電壓:3.3V;輸入模擬電壓范圍:0-3.3V;片上采樣保持功能;普通轉(zhuǎn)換模式;分離的X/Y軸坐標轉(zhuǎn)換模式;自動(連續(xù))X/Y軸坐標轉(zhuǎn)換模式;等待中斷模式。圖2.2 S3C2410處理器內(nèi)置ADC和觸摸屏接口圖S3C2410處理器上的A/D轉(zhuǎn)換器和觸摸屏接口如圖2.2所示。其中

21、AIN7連接觸摸屏的X+引腳,而AIN5連接觸摸屏的Y+引腳。控制觸摸屏的引腳(X+、X-、Y+和Y-),要用到4個外部晶體管,并采用控制信號nYPON,YMON,nXPON和XMON來控制晶體管的打開與關(guān)閉。(2)外接觸摸屏轉(zhuǎn)換接口芯片的方式外接一個觸摸屏專用的控制芯片如ADS7843,ADS7843適合用在四線制觸摸屏,它通過標準SPI協(xié)議和CPU通信,操作簡單,精度高,當觸摸屏被按下時則ADS7843向CPU發(fā)中斷請求,CPU接到請求后,應(yīng)延時一下再響應(yīng)其請求,來消除抖動使得采樣更準確。ADS7843特點如下:四線電阻式觸摸屏接口;單電壓供電,電壓范圍為2.7-5V;最高125kHz的轉(zhuǎn)

22、換速度;同步串行接口(SPI);12位或8位采樣精度;2個附加的A/D通道。12位的A/D最大支持4096x4096點陣的LCD,可以滿足大多數(shù)應(yīng)用。多數(shù)嵌入式處理器包括S3C2410處理器都集成了同步串行接口(SPI),很容易與ADS7843直接相連。S3C2410處理器和ADS7843接口原理圖如圖2.3所示。圖2.3 S3C2410和ADS7843接口原理圖3 交叉編譯環(huán)境的建立3.1Linux交叉編譯環(huán)境簡介絕大多數(shù)Linux軟件開發(fā)都是以本機方式進行的,即采用本機(HOST)開發(fā)、調(diào)試、本機運行的方式。但這種方式不適合于嵌入式系統(tǒng)的軟件開發(fā),因為對于嵌入式系統(tǒng),沒有足夠的資源在開發(fā)板

23、上運行開發(fā)工具和調(diào)試工具。因此,通常采用一種交叉編譯調(diào)試的方式,建立交叉編譯環(huán)境的PC機稱為宿主機,而對應(yīng)的開發(fā)板稱為目標板7,15。開發(fā)時,在運行Linux的宿主機上,使用宿主機的交叉編譯、匯編及連接工具生成可執(zhí)行的二進制代碼(這種可執(zhí)行代碼并不能在宿主機上執(zhí)行,而只能在目標板上執(zhí)行),然后把可執(zhí)行文件下載到目標板上運行。調(diào)試時可以采用串口、以太網(wǎng)口等。在宿主機建立嵌入式Linux開發(fā)環(huán)境有以下幾個方案:(1)基于宿主機Windows操作系統(tǒng)下的Cygwin;(2)直接安裝Linux操作系統(tǒng);(3)在Windows下安裝虛擬機后,再在虛擬機中安裝Linux操作系統(tǒng);Cygwin只是模擬一個U

24、nix環(huán)境,雖然有助于初學者學習,但它所支持的命令不完整,它是一個不完整的Unix系統(tǒng);直接安裝Linux則不用考慮兼容性問題,但設(shè)置較為復雜,很容易出錯;而在虛擬機里安裝的Linux是完整的,但要考慮和Windows的兼容問題。在綜合比較之下,采用第三種方案,即在宿主機Windows環(huán)境下安裝虛擬機,再在虛擬機中安裝Linux系統(tǒng)。3.2 開發(fā)環(huán)境的配置3.2.1配置NFS通過NFS方式建立宿主機和開發(fā)板的通訊是開發(fā)調(diào)試過程中常用的方法8。配置NFS網(wǎng)絡(luò)設(shè)置,包括配置IP地址、NFS服務(wù)、防火墻。開發(fā)板上固定的IP地址為,為了進行通訊,將宿主機上的IP設(shè)置成和開發(fā)板在同一網(wǎng)段,這里將虛擬機的

25、IP地址設(shè)置為。對于REDHAT9.0,它的默認設(shè)置是打開防火墻,對于外來的IP訪問它全部拒絕,因此在網(wǎng)絡(luò)設(shè)置完成后,應(yīng)立即關(guān)閉防火墻。最后在NFS服務(wù)器的目錄中填入要共享的文件路徑/root/share,在宿主機中填入允許進行連接的主機IP地址192.168.0.*,并選擇允許客戶對共享目錄的操作為讀寫狀態(tài)(Read/Write)。由于Linux操作系統(tǒng)是裝在虛擬機上,所以這里有個IP設(shè)置的問題,起初以為虛擬機和主機的IP應(yīng)該設(shè)置為相同的,但這樣始終不能用NFS將開發(fā)板掛載到Linux系統(tǒng)上。總是提示:Unknown nfs mount option: nolock;Mount: nfs m

26、ount failed: No such file or directoryWarning: mount version newer than kernelNFS : mount program does not pass remote address !Mount: Mounting 21:/root/share on /host failed: Invaild argument后來查了計算機網(wǎng)絡(luò)方面的資料,才知道因為裝虛擬機時網(wǎng)絡(luò)是橋接的,相當于建立了一個局域網(wǎng),需要給虛擬機和主機分配不同的IP才能工作。3.2.2 配置MinicomMinicom是Linux下的通信

27、終端程序,通過minicom可以設(shè)置、監(jiān)視串口工作狀態(tài),接收、顯示串口收到的信息。在Linux操作系統(tǒng)的超級終端中輸入minicom即可進入minicom界面。先按住CtrlA,再按Z鍵可以進入主配置界面。其中主要的設(shè)置為:端口號設(shè)置為/dev/ttsS0(即使用串口1);波特率設(shè)置為115200;硬件流和軟件流都改為NO8。3.3 開發(fā)工具的安裝開發(fā)工具主要包括針對目標板的編譯器gcc、目標板的二進制工具binutils、目標板的標準c庫glibc和目標板的Linux內(nèi)核頭文件9。其中g(shù)libc和內(nèi)核源代碼的版本必須與目標板上實際使用的版本保持一致。其主要步驟為:(1)下載binutils、

28、gcc、glibs的源碼;(2)配置并編譯binutils,得到下一步要用到的匯編器和連接器;(3)配置并編譯gcc源代碼,生成gcc編譯器;(4)配置glibc并編譯生成glibc的c函數(shù)庫(5)再次配置并編譯gcc源代碼,生成其它語言的編譯器如:C等10,11。這是開發(fā)環(huán)境建立的整個過程。如果一步步來做是比較復雜的,一般可以從網(wǎng)上下載別人整理好的整個文件包。這里直接采用北京博創(chuàng)提供的工具包。4 基于Qt的圖形用戶界面設(shè)計圖形用戶界面GUI(Graphics User Interface)是迄今為止計算機系統(tǒng)中最為成熟的人機交互技術(shù)。嵌入式GUI的要求是簡單、直觀、可靠、占用資源小且反應(yīng)快速

29、,以適應(yīng)系統(tǒng)硬件資源有限的條件。另外,由于嵌入式系統(tǒng)硬件本身的特殊性,嵌入式GUI應(yīng)具備高度可移植性與可裁剪性,以適應(yīng)不同的硬件條件和使用需求8,12。總體來講,嵌入式GUI應(yīng)具備以下特點:體積小;運行時耗用系統(tǒng)資源小;上層接口與硬件無關(guān),高度可移植性;在某些應(yīng)用場合應(yīng)具備實時性。Qt/Embedded是最優(yōu)秀的嵌入式GUI開發(fā)工具之一,在畢業(yè)設(shè)計中采用它來編寫用于觸摸屏的圖形界面。4.1 Qt體系結(jié)構(gòu)4.1.1Qt架構(gòu)     Qt/Embedded是著名的Qt庫開發(fā)商Trolltech公司開發(fā)的面向嵌入式系統(tǒng)的Qt版本。它延續(xù)了Qt在X W

30、indow上的強大功能,在底層摒棄了函數(shù)庫Xlib,僅采用幀緩沖作為底層圖形接口。同時,將外部輸入設(shè)備抽象為keyboard和mouse輸入事件,底層接口支持鍵盤、GPM 鼠標、觸摸屏以及用戶自定義的設(shè)備等。Qt/ Embedded 是完全面向?qū)ο蟮?很容易擴展,提供了豐富的窗口部件集,并且允許真正的組件編程,庫的穩(wěn)定性和健壯性比較好。它的類庫接口完全兼容于同版本的Qt- X11 ,使用X Window下的開發(fā)工具可以直接開發(fā)基于Qt/Embedded的應(yīng)用程序GUI界面12。Qt/Embedded和Qt的體系結(jié)構(gòu)比較如圖4.1所示。應(yīng)用源程序Qt APIQt/EmbeddedQt/X11 Q

31、t/XLibX Window Server幀緩沖Linux 內(nèi)核圖4.1  Qt/Embedded與Qt/X11的比較  Qt/Embedded的底層圖形引擎基于framebuffer,framebuffer出現(xiàn)在以上內(nèi)核的版本當中的一種驅(qū)動程序接口。這種接口采用mmap系統(tǒng)調(diào)用,將顯示設(shè)備抽象為幀緩沖區(qū)。用戶可以將它看成是顯示內(nèi)存的一個映象,將其映射到進程地址空間之后,就可以直接進行讀寫操作了,而寫操作可以立即反映在屏幕上。Framebuffer驅(qū)動程序是最重要的驅(qū)動程序之一,正是這個驅(qū)動程序才能使系統(tǒng)屏幕顯示內(nèi)容。其實現(xiàn)分為兩個方面:一是對LCD及其相關(guān)部件的

32、初始化,包括畫面緩沖區(qū)的創(chuàng)建和對DMA通道的設(shè)置;二是對畫面緩沖區(qū)的讀寫,具體到代碼為read、write等系統(tǒng)調(diào)用接口。圖4.2為Qt/Embedded的實現(xiàn)結(jié)構(gòu)。Qt/Embedded 應(yīng)用程序 QWSSever圖形事件服務(wù)Qt/Embeddedframebuffer輸入設(shè)備驅(qū)動 Linux操作系統(tǒng)底層硬件平臺圖4.2 Qt/Embedded的實現(xiàn)結(jié)構(gòu)4.1.2 Qt文件架構(gòu)Qt由三個文件構(gòu)成:、 qt-embedded-和。  tamkeQt-X11Qt/EmbeddedQtopia生成和管理MakefileTMAKEDIR TAMKEPATHQvfb虛擬幀緩沖工具U

33、ic用戶界面編譯器Designer Qt應(yīng)用程序設(shè)計工具PATH LD_LIBRARY_PATHQt庫支持Libqte.soQTEDIR PATH LD_LIBRARY_PATH應(yīng)用程序開發(fā)包桌面環(huán)境QPEDIR PATH LD_LIBRARY_PATH圖4.3  Qt包含的工具及環(huán)境變量聲明其中tmake是qt應(yīng)用程序的編譯工具,用于生成Makefile文件;x-11主要包含三個工具moc、uic和designer,moc用于Qt C擴展的metra-object編譯器,uic從XML文件生成代碼的用戶界面編譯器,而designer是用于設(shè)計窗口組件的應(yīng)用程序。Qt/Embedde

34、d不僅提供了所有qt程序需要的庫文件,還提供了虛擬幀緩沖qvfb(qt virtual frame buffer),qvfb是X窗口用來運行和測試 Qtopia應(yīng)用程序的系統(tǒng)程序,qvfb使用了共享存儲區(qū)域(虛擬的幀緩沖)來模擬幀緩沖并且在一個窗口中(qvfb)模擬一個應(yīng)用來顯示幀緩沖,顯示的區(qū)域被周期性的改變和更新。通過指定顯示設(shè)備的寬度和顏色深度,并且虛擬出來的緩沖幀和物理的顯示設(shè)備在每個像素上保持一致。使得我們在每次調(diào)試應(yīng)用時不需要經(jīng)常刷新開發(fā)板上的FLASH存儲空間,從而加速了應(yīng)用程序的開發(fā)。4.2 Qt環(huán)境的建立在Linux系統(tǒng)的/root目錄下,建立子目錄2410qt,并

35、將上面提到的三個文件復制到/root/2410qt中,進入該目錄,將三個壓縮文件包分別解壓:tar xzf qt-x11-.tar.gztar xzf qt-embedded-并分別設(shè)置環(huán)境變量:export QTEDIR=$PWD/qt-export TMAKEDIR=$PWD/tmake-1.13export QT2DIR=$PWD/qt-環(huán)境變量的設(shè)置是非常重要的,它關(guān)系到能否正確的安裝及編譯這些安裝包,其中:TMAKEDIR:指向用于編譯Qt/Embedded的Tmake工具QT2DIR:指向qt-的文件夾QTEDIR:指向qt-的文件夾當環(huán)境變量設(shè)置正確后,就可以對它們分別進行編譯了

36、。(1)編譯qt-cd $QT2DIRexport TMAKEPATH=$TMAKEDIR/lib/linux-g+export QTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure -no-xft makecp arf bin/uic $QTEDIR/bin/(2)編譯qvfbexport TMAKEPATH=$TMAKEDIR/lib/linux-g+export QTDIR=$QT2DIRexport PATH=$QTDIR/bin:$P

37、ATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATHcd $QTEDIR/tools/qvfb/root/2410sQt/tmake-1.13/bin/tmake -o Makefile makemv qvfb $QTEDIR/bin/(3)編譯Qt/Embeddedcd $QTEDIRexport TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g+export QTDIR=$QTEDIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PATH=$QT

38、DIR/lib:$LD_LIBRARY_PATH./configure -no-xft -qvfb -depths 4,8,16,32make開始幾次編譯時,對整個編譯過程還不了解,在設(shè)置環(huán)境變量時容易漏掉“$”符號或是拼寫錯誤,而且擔心make失敗后,中間生成的文件會對下一次make產(chǎn)生影響。幾天時間后,編譯了近十次才完全編譯成功。其中編譯qvfb時,在輸入make指令后,提示“Nothing to be done for all”,查找資料后知道要在make前先執(zhí)行make clean命令,以清除上次編譯產(chǎn)生的中間文件。當編譯全部通過后,就可以在qvfb上來檢測自己編寫的應(yīng)用程序,其步驟如

39、下:(1)生成工程文件(.pro)每一個Qt 程序都對應(yīng)著一個工程文件,因為tmake工具要借此工程生成相應(yīng)的Makefile文件。生成工程文件需要使用progen工具,它的位置在$TMAKEDIR/bin下,使用progen生成工程文件的方法如下:$TMAKEDIR/bin/progen t app.t o (2)生成Makefile 文件Qt提供了生成Makefile文件的工具tmake,這極大地方便了應(yīng)用程序的開發(fā),節(jié)省了大量的時間,而且還可根據(jù)不同平臺的需要生成適合于不同平臺的Makefile文件。在命令行中輸入如下命令:$TMAKEDIR/bin/tmake o M

40、akefile 完成上面的步驟以后就可以在當前的目錄中生成一個Makefile文件,之后在命令行中輸入make命令就可以對整個程序進行編譯鏈接了。最終可以生成一個二進制的可執(zhí)行文件,其在qvfb中的顯示結(jié)果如圖4.4所示。圖4.4 hello Qt/Embedded在qvfb中的顯示結(jié)果4 .3 Qt Designer的使用Qt Designer是一個GUI工具,它可以幫助我們來加快編寫Qt應(yīng)用程序的速度。利用Qt Designer可以用一種所見既所得的方式來生成Qt程序GUI 圖形界面的程序源碼,并且只需要手工編寫一個main函數(shù)就可以進行編譯了。利用Qt Designer

41、可以非常快速的學會Qt,但是在編寫大型應(yīng)用程序時并不使用Qt Designer,這是因為Qt Designer所產(chǎn)生的程序源碼有些繁瑣,運行起來也比較慢,因此,只是借助Qt Designer來更好的理解和學習Qt,不是直接去運行Qt Designer 生成的程序源碼。Qt應(yīng)用程序的完成包括以下幾個步驟:(1)創(chuàng)建和初始化子部件(2)設(shè)置子部件的布局(3)設(shè)置Tab鍵的次序(4)建立信號與插槽的連接將部件布置好后,就可以根據(jù)我們的需要來建立連接,Qt開創(chuàng)性的使用了信號與插槽機制,與傳統(tǒng)的回調(diào)函數(shù)方式不同,它是一種靈活、類型安全、快速、完全面向?qū)ο蟮腃+機制。使用傳統(tǒng)的回調(diào)函數(shù)機制來關(guān)聯(lián)某段代碼和

42、和一個按鍵,需要有一個指向函數(shù)的指針,并且將這個指針地址傳給按鈕。當這個按鈕被按下,這個函數(shù)就會被執(zhí)行。以前的工具包不能保證函數(shù)被執(zhí)行時所傳遞的類型是正確的,這使得進程很容易崩潰。另一個問題是,這種回調(diào)方法緊緊得綁定了GUI得基本功能元素,使得很難進行獨立的分類開發(fā)。Qt的信號與插槽機制則不同,Qt部件(Widgets)事件發(fā)生時發(fā)出信號,如一個按鈕被點擊時會發(fā)出一個“clicked”信號。程序員可以選擇建立一個函數(shù)(稱為插槽)并調(diào)用connect( )來將這個信號與插槽連接起來。用戶在編程時可以將兩個對象捆綁在一起而不需要知道每個對象的各自的信息,而且可以自己創(chuàng)建信號與插槽,發(fā)射自己的信號等

43、等。Qt Designer最終生成的文件為.ui文件,之后用Qt提供的uic工具可以生成.h文件和.cpp文件。但只有這兩個文件程序還是不能運行的,還需要一個main.cpp文件才能進行編譯鏈接。到這一步編譯出來的Qt應(yīng)用程序只能在宿主機上運行,若要移植到開發(fā)板上還要對Qt/Embedded重新編譯。其編譯步驟與前面編譯宿主機上的Qt/Embedded類似,唯一不同的是編譯器的設(shè)置:export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g+,即將平臺由linux-x86-g+改為linux-arm-g+。4.4Qtopia虛擬平臺建立Qtopia是Troll

44、Tech公司為采用嵌入式Linux系統(tǒng)的移動計算設(shè)備和手持設(shè)備而開發(fā)的綜合應(yīng)用平臺,包含完整的應(yīng)用層、靈活的用戶界面、窗口操作系統(tǒng)、應(yīng)用程序啟動程序以及開發(fā)框架。它是基于Qt/Embedded編寫的應(yīng)用程序環(huán)境,也是開放源碼的一套應(yīng)用程序包和開發(fā)庫。使用Qt/Embedded不僅可以開發(fā)Qtopia也可以用來開發(fā)面向Qtopia的第三方軟件。它包括三個版本:Qtopia手機版Qtopia PDA版和Qtopia消費電子產(chǎn)品平臺。Qtopia虛擬平臺由文件、qtopia-free-source-.tar.gz、qt-embedded-2.3.10.tar.gz 和qt-x11-2.3.2 .ta

45、r.gz組成。其編譯方法和前面建立qt桌面運行環(huán)境時的方法類似,不過前面解壓出來的文件在這里不可以直接使用,必須重新解壓。這里多出了libqte庫文件和qtopia的編譯。其中在編譯qtopia時容易出現(xiàn)錯誤,主要是說Qtoipa的運行需要jpeg的支持,提示前面在編譯ligqte庫文件時沒有configure上-system-jpeg,因此需要重新編譯libqte,在configure時加上-system-jpeg。在宿主機上編譯成功的Qtopia平臺如圖4.5所示。圖4.5 宿主機上的虛擬Qtopia平臺4.5Qtopia的移植將Qtopia移植到在S3C2410處理器上,其編譯方法和建立

46、本機Qtopia平臺類似,不過加上了e2fsprogs-libs-1.37、jpeg-6b和tslib三個工具包,Qtopia分別用到它們中的libuuid、jpeg和tslib庫文件。在編譯完后通過NFS將文件下載到/mnt/yaffs目錄下,同時還要復制幾個庫文件到開發(fā)板上。但是在調(diào)試過程中遇到了問題:實驗文檔上給出的是:將src/qtopia.sh 下載到目標機的/usr/bin 目錄下將src/e2fs-install/lib/libuuid.so*下載到目標機的/lib 目錄下將src/jpeg-install/lib/libjpeg.so*下載到目標機的/lib 目錄下通過NFS將

47、開發(fā)板掛載到宿主機后,依次執(zhí)行:cp /root/share/qtopia.sh /usr/bincp /root/share/libuuid.so* /libcp /root/share/libjpeg.so* /lib終端上總提示錯誤:cp: unable to open /lib/libuuid.so*:Operation not permitted cp: unable to open /lib/libjpeg.so.*: Operation not permitted cp: unable to open '/usr/bin/qtopia.sh': Permissio

48、n denied起初認為是cp的參數(shù)設(shè)置錯誤,可將cp的每個參數(shù)都試了仍然提示上面的錯誤。后來查了嵌入式文件系統(tǒng)的資料,知道yaffs文件系統(tǒng)的屬性是可讀、可寫、可修改的。而根文件系統(tǒng)是只讀的,/lib和/usr/bin都是屬于根文件系統(tǒng),所以文件無法復制。后來發(fā)現(xiàn)是實驗文檔書寫有誤,應(yīng)該把文件都復制到y(tǒng)affs文件系統(tǒng)下:將src/qtopia.sh 下載到開發(fā)板的/mnt/yaffs/Qtopia 目錄下.將src/e2fs-install/lib/libuuid.so*下載到開發(fā)板的/mnt/yaffs/lib 目錄下將src/jpeg-install/lib/libjpeg.so*下載

49、到開發(fā)板的/mnt/yaffs/lib 目錄下經(jīng)過改正,最終調(diào)試通過,解決了系統(tǒng)的問題。5 觸摸屏圖形操作界面的實現(xiàn)5.1 Linux設(shè)備驅(qū)動程序5.1.1設(shè)備驅(qū)動程序分類Linux中的驅(qū)動程序設(shè)計是嵌入式Linux開發(fā)中十分重要的部分,驅(qū)動程序是應(yīng)用程序與硬件之間的一個中間軟件層。目前Linux 支持的設(shè)備驅(qū)動可分為三種:字符設(shè)備(character device)、塊設(shè)備(block deivce)和網(wǎng)絡(luò)接口設(shè)備(network interface)。(1)字符設(shè)備:所有能夠像字節(jié)流一樣訪問的設(shè)備比如文件等在Linux中都通過字符設(shè)備驅(qū)動程序來實現(xiàn)。在Linux中它們也被映射為文件系統(tǒng)的一

50、個節(jié)點,常放置在/dev目錄下。字符設(shè)備驅(qū)動程序一般要包含open,close,read,write 等幾個系統(tǒng)調(diào)用。(2)塊設(shè)備:Linux的塊設(shè)備通常是指諸如磁盤,內(nèi)存,F(xiàn)lash等可以容納文件系統(tǒng)的存儲設(shè)備。與字符設(shè)備類似,塊設(shè)備也是通過文件系統(tǒng)來進行訪問,它們之間的區(qū)別僅僅在于內(nèi)核內(nèi)部管理數(shù)據(jù)的方式不同。它也允許像字符設(shè)備一樣的訪問,可以一次傳遞任意多的字節(jié)。(3)網(wǎng)絡(luò)接口設(shè)備:網(wǎng)絡(luò)接口設(shè)備是Linux中比較復雜的一種設(shè)備,通常它們指的是硬件設(shè)備,但有時也可是一個軟件設(shè)備(如回環(huán)接口loopback)。它們由內(nèi)核中網(wǎng)絡(luò)子系統(tǒng)驅(qū)動,負責發(fā)送和接收數(shù)據(jù)包。它們的數(shù)據(jù)傳送往往并不是面向流的(

51、少數(shù)如telnet,F(xiàn)TP等是面向流的),所以不容易把它們映射到一個文件系統(tǒng)的節(jié)點上。在Linux中采用給網(wǎng)絡(luò)接口設(shè)備分配一個唯一名字的方法來訪問該設(shè)備13。Linux設(shè)備驅(qū)動程序的構(gòu)成應(yīng)用程序一般有一個main函數(shù),從頭到尾執(zhí)行一個任務(wù);驅(qū)動程序卻不同,它沒有main函數(shù),通過使用宏module_init(初始化函數(shù)名)將初始化函數(shù)加入內(nèi)核全局初始化函數(shù)列表中,在內(nèi)核初始化時執(zhí)行驅(qū)動的初始化函數(shù),從而完成驅(qū)動的初始化和注冊,之后驅(qū)動便停止等待被應(yīng)用軟件調(diào)用。驅(qū)動程序中有一個宏moudule_exit(退出處理函數(shù)名)注冊退出處理函數(shù)。它在驅(qū)動退出時被調(diào)用。應(yīng)用程序可以和GLIBC庫連接,可以

52、包含標準的頭文件,比如<stdio.h>,在驅(qū)動程序中是不能使用標準C庫的,包含的頭文件只能是內(nèi)核的頭文件。內(nèi)核需要一對稱作主次設(shè)備號的參數(shù),才能唯一標識一個設(shè)備。主設(shè)備號相同的設(shè)備使用相同的驅(qū)動程序,次設(shè)備號用于區(qū)分具體設(shè)備的實例。設(shè)備操作宏MAJOR()和MINOR()可分別用于獲取主次設(shè)備號設(shè)備類型、主次設(shè)備號是內(nèi)核與設(shè)備驅(qū)動程序通信時所使用的,但是對于開發(fā)應(yīng)用程序的用戶來說比較難于理解和記憶,所以Linux使用了設(shè)備文件的概念來統(tǒng)一對設(shè)備的訪問接口,在引入設(shè)備文件系統(tǒng)(devfs)之前Linux將設(shè)備文件放在/dev目錄下,設(shè)備的命名一般為設(shè)備文件名加上數(shù)字或字母表示的子類

53、。在Linux-2.4內(nèi)核中引入了設(shè)備文件系統(tǒng) (devfs),所有的設(shè)備文件作為一個可以掛裝的文件系統(tǒng),這樣就可以被文件系統(tǒng)進行統(tǒng)一管理。通常所說的設(shè)備驅(qū)動程序接口是指結(jié)構(gòu)file_operations,它定義在include/linux/fs.h中。完整的file_operations數(shù)據(jù)結(jié)構(gòu)為:struct file_operations struct module *owner;loff_t (*llseek) (struct file *, loff_t, int);ssize_t (*read) (struct file *, char *, size_t, loff_t *);s

54、size_t (*write) (struct file *, const char *, size_t, loff_int (*readdir) (struct file *, void *, filldir_t);unsigned int (*poll) (struct file *, struct poll_table_struct *);int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);int (*mmap) (struct file *, struct vm_area_struct *)

55、;int (*open) (struct inode *, struct file *);int (*flush) (struct file *);int (*release) (struct inode *, struct file *);int (*fsync) (struct file *, struct dentry *, int datasync);int (*fasync) (int, struct file *, int);int (*lock) (struct file *, int, struct file_lock *);ssize_t (*readv) (struct f

56、ile *, const struct iovec *, unsigned long, loff_t *);ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsign

57、ed long, unsignedlong);file_operations是整個Linux內(nèi)核的重要數(shù)據(jù)結(jié)構(gòu),它也是file、inode結(jié)構(gòu)的重要成員,在嵌入式系統(tǒng)的開發(fā)中一般僅僅實現(xiàn)其中幾個接口函數(shù):read、write、ioctl、open、release,就可以完成應(yīng)用系統(tǒng)需要的功能。static struct file_operations _fops = 完成了將驅(qū)動函數(shù)映射為標準接口,devfs_register()和register_chrdev()函數(shù)完成將驅(qū)動向內(nèi)核注冊。驅(qū)動程序的使用有read、write、ioctl、open、release等方法。(1)Open 方法Open方法提供給驅(qū)動程序初始化設(shè)備的能力,從而為以后的設(shè)備操作做好準備,此外open操作一般還會遞增使用計數(shù),用以防止文件關(guān)閉前模塊被卸載出內(nèi)核。在大多數(shù)驅(qū)動程序中Open方法應(yīng)完成如下工作:1)遞增使用

溫馨提示

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

最新文檔

評論

0/150

提交評論