




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、摘 要隨著嵌入式技術在智能手機、PDA等手持終端設備的應用越來越廣泛,觸摸屏作為一種終端輸入設備,具有節省空間、操作簡單、反應速度快等優點,非常適用作手持終端等嵌入式系統的輸入設備。S3C2410是一款具有ARM920T內核的16/32位微處理器。作為新一代嵌入式平臺的核心,ARM9采用5級流水線,使用大量寄存器,并支持協處理器和片上調試,以指令執行速度快,尋址方式靈活簡單,執行效率高為優勢,在工業控制、無線通訊、消費類電子產品、成像和安全產品等各個領域得到了廣泛的應用。嵌入式Linux是在開放源代碼Linux的基礎上發展起來的,內核精簡,內存管理功能強大,支持多任務,以設備驅動程序的方式提供
2、統一的外設接口。因此Linux是嵌入式操作系統的最佳選擇。Qt/Embedded是一個專門為嵌入式系統提供圖形界面的用戶系統,提供了豐富的窗口小部件,支持窗口部件的定制,而且內存消耗少。本文介紹了基于S3C2410處理器平臺,以嵌入式Linux 操作系統和Qt/Embedded為接口的LCD觸摸屏操作界面的設計。該方案可運用于高檔汽車GPS巡航系統、工程機械安全儀表和電能質量監測儀等實際工程應用中。關鍵詞: 觸摸屏;嵌入式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體系結構22.2 S3C2410處理器簡介22.3 觸摸屏接口電路33 交叉編譯環境的建立73.1 Linux交叉編譯環境簡介73.2 開發環境的配置73.3 開發工具的安裝84 基于Qt的圖形用戶界面設計104.1 Qt體系結構104.2 Qt環境的建立124.3 Qt Designer的使用154.4 Qtopia虛擬平臺建立164.5 Qtopia的移植175 觸摸屏圖形操作界面的實現195.1 Linux設備驅動程序195.2 觸摸屏驅動程序分析225.3 Qt/Eembedded中的觸摸屏驅動接口285.4
10、 Qt/Embedded的觸摸屏驅動接口的設置305.5 驅動程序調試過程中出現的問題31結 論34致 謝35參 考 文 獻36附錄A 觸摸屏驅動部分源程序371 引言嵌入式系統就是以應用為中心、以計算機技術為基礎,軟、硬件可裁剪,對功能可靠性、成本、體積和功耗等嚴格要求的專用計算機系統1。隨著嵌入式技術的發展,手持終端設備的應用越來越廣泛,如智能手機、警務通、手持抄表系統等。由于手持終端對體積要求很嚴格,而觸摸屏作為一種實用的電腦輸入設備,具有節省空間、堅固耐用、反應速度快、易于交流等優點,非常適合用作手持終端設備的輸入設備。Linux操作系統因開放源碼、便于裁剪,是當前嵌入式操作系統的主要
11、選擇。ARM9作為新一代嵌入式平臺,憑借其強大的功能與良好的設備支持在數據通信、多媒體顯示和手持終端設備等領域得到了廣泛的應用。因此作為與用戶交互的終端媒介,如何在以ARM9為核心的系統中集成觸摸屏模塊以及在嵌入式Linux操作系統中實現其驅動程序,是一個非常值得去研究和解決的課題。ARM9微處理器作為新一代嵌入式平臺,它采用5級流水線,使用大量寄存器,并支持協處理器和片上調試,以指令執行速度快,尋址方式靈活簡單,執行效率高為優點2,14。在工業控制、無線通訊、消費類電子產品、成像和安全產品等各個領域得到了廣泛的應用。嵌入式Linux是在開放源代碼的Linux基礎上發展起來的,它內核精簡,可移
12、植性強,內存管理功能強大;支持多任務;以設備驅動程序的方式提供統一的外設接口3,4。因此Linux是嵌入式平臺上操作系統的最佳選擇。Qtopia是在基于Qt的嵌入式版本Qt/Embedded庫的基礎上,專門針對PDA、SmartPhone這類運行嵌入式Linux的移動計算設備和手持終端所開發的開放源碼的一套應用程序包和開發庫5。它是用Qt/Embedded程序庫編寫的應用程序環境,界面優美,主要應用于高端手機、PDA等手持設備,具有廣闊的發展前景。 在本次畢業設計中,以博創科技嵌入式教學科研UP-NETARM2410-S開發板為硬件平臺,實現基于S3C2410處理器的嵌入式LINUX內核的編譯
13、與移植,開發基于Qt的人機友好LCD觸摸屏操作界面,并在S3C2410處理器上完成Qtopia的移植。2硬件平臺2.1 ARM體系結構及應用ARM9微處理器作為新一代嵌入式平臺,它采用5級流水線,支持Thumb/ARM雙指令集,能很好地兼容8位/16位器件;大量使用寄存器,指令執行速度快;尋址方式靈活簡單,執行效率高;支持協處理器和片上調試。到目前為止,ARM微處理器及技術已經深入到各個領域。作為32位的RISC架構,基于ARM內核的為控制器芯片不但占據了微控制器市場的大部分市場份額,同時也逐漸向低端微控制器應用領域擴展,ARM微處理器的低功耗、高性價比,向傳統的8位/16位微控制器提出了挑戰
14、。目前已有超過85的無線通訊設備采用了ARM技術,手機中的32位SIM智能卡也采用了ARM技術5,ARM以其高性能和低成本,在該領域的地位日益鞏固。隨著寬帶技術的推廣,采用ARM技術的ASDL芯片正逐漸獲得競爭優勢。此外,ARM在語音及視頻處理上進行了優化。并獲得了廣泛支持,也對DSP的應用領域提出了挑戰。2.2S3C2410處理器簡介S3C2410處理器是一款基于ARM920T內核的16/32位RISC嵌入式處理器,主要面向手持設備、移動通信等應用領域。它集成了大量的功能單元:(1)1.8V ARM920T內核,1.8V/2.5V/3.3V存儲系統,帶有3.3V16KB指令和16KB數據緩存
15、及MMU單元的外部O接口的微處理器;(2)外部存儲器控制(SDRAM控制和芯片選擇邏輯);(3)LCD控制器(支持4K顏色的STN或256K色TFT的LCD),帶有1個通道的LCD專用DMA控制器;(4)4通道DMA,具有外部請求引腳;(5)3通道UART(支持IrDA1.0,16字節發送FIFO及16字節接收FIFO)/2通道SPI接口;(6)1個通道多主IIC總線控制器/1通道IIS總線控制器;(7)2個主機接口的USB口/1個設備USB口(1.1版本);(8)4通道PWM定時器/1通道內部計時器;(9)117位通用目的I/O口/24通道外部中斷源;(10)帶觸摸屏接口的8通道10位ADC
16、;等等。該平臺提供了系統級的硬件和軟件二次開發,并且能夠很方便地在該平臺上進行相關的功能擴展,以及進行所需的產品設計。此次畢業設計中主要用到S3C2410中ADC和觸摸屏接口模塊。2.3 觸摸屏接口電路2.3.1觸摸屏分類觸摸屏按其工作原理的不同分為五種:矢量壓力傳感技術觸摸屏、電阻式觸摸屏、電容式觸摸屏、紅外線技術觸摸屏、表面聲波技術觸摸屏6。紅外線觸摸屏屏價格低廉,但其外框易碎,容易產生光干擾,曲面情況下失真;電容屏設計理論好,但其圖像失真問題很難得到根本解決;表面聲波觸摸屏清晰抗暴,適于各種場合,缺憾是屏表面的水滴、塵土會使觸摸屏變地遲鈍,甚至不工作;電阻式觸摸屏結構簡單,成本低廉,透光
17、效果好,工作環境和外界完全隔離,不怕灰塵和水汽,并且穩定性高。因此,在實際應用中使用電阻式觸摸屏較多。2.3.2電阻式觸摸屏的工作原理電阻式觸摸屏又可分為四線式和五線式兩種。它們在制作工藝上基本相同,都由4層透明薄膜構成,最下面是玻璃或有機玻璃構成的基層,最上面是一層外表面經過硬化處理從而光滑防刮的塑料層,附著在上下兩層內表面的兩層為金屬導電層(O T I,氧化銦),這兩層由細小的透明隔離點進行絕緣。當手指觸摸屏幕時,兩個導電層在觸摸點處接觸。觸摸層的兩個金屬導電層分別用來測量x 軸和y 軸方向的坐標。用于x 坐標測量的導電層從左右兩端引出兩個電極,記為X+ 和X-。用于y 坐標測量的導電層從
18、上下兩端引出兩個電極,記為Y+和Y-。這就是四線電阻式觸摸屏的引線構成。其簡單等效電路如圖2.1所示。電阻式觸摸屏工作的實質是對X、Y兩個方向電阻分壓的測量。當手指或筆觸摸屏幕時,平時相互絕緣的兩導電層就在觸摸點位置接觸,因其中一面導電層(頂層)接通X軸方向的5V均勻電壓場,使得檢測層(底層)的電壓由零變為非零,控制器偵測到這個接通后,進行A/D轉換,并將得到的電壓值與5V相比即可得觸摸點的X軸坐標為:Xi=Lx×(Vi / V)同理可獲得觸點的Y軸坐標7。觸摸屏 X+Y+X-Y-圖2.1 觸摸屏簡單等效電路兩種接口方式觸摸屏和S3C2410處理器的接口方式有兩種:使用S3C2410
19、處理器內部的觸摸屏控制器和使用專門的觸摸屏接口芯片。(1)使用S3C2410處理器內部的觸摸屏控制器可以直接將相關的引腳設置為觸摸屏功能引腳,和觸摸屏直接相連。S3C2410處理器集成了8通道模擬輸入的10位A/D轉換器。它將輸入的模擬信號轉換為10位的二進制數字代碼。在2.5MHz的A/D轉換器時鐘下,最大轉換速率可達到500KSPS。A/D轉換器支持片上采樣和保持功能,并支持掉電模式。S3C2410處理器的引腳AIN7和AIN5用于連接觸摸屏的模擬信號輸入。觸摸屏接口電路一般由觸摸屏、4個外部晶體管和一個外部電源組成。如圖2.2所示。觸摸屏接口的控制和選擇信號(nYPON,YMON,nXP
20、ON和XMON)連接切換X坐標和Y坐標轉換的外部晶體管。模擬輸入引腳(AIN5,AIN7)則連接到觸摸屏引腳。觸摸屏控制接口包括一個外部晶體管控制邏輯和具有中斷產生邏輯的ADC接口邏輯,其特性如下:分辨率:10位;微分線性度誤差:1.0 LSB;積分線性度誤差:2.0 LSB;最大轉換速率:500 KSPS;低功耗;供電電壓:3.3V;輸入模擬電壓范圍:0-3.3V;片上采樣保持功能;普通轉換模式;分離的X/Y軸坐標轉換模式;自動(連續)X/Y軸坐標轉換模式;等待中斷模式。圖2.2 S3C2410處理器內置ADC和觸摸屏接口圖S3C2410處理器上的A/D轉換器和觸摸屏接口如圖2.2所示。其中
21、AIN7連接觸摸屏的X+引腳,而AIN5連接觸摸屏的Y+引腳??刂朴|摸屏的引腳(X+、X-、Y+和Y-),要用到4個外部晶體管,并采用控制信號nYPON,YMON,nXPON和XMON來控制晶體管的打開與關閉。(2)外接觸摸屏轉換接口芯片的方式外接一個觸摸屏專用的控制芯片如ADS7843,ADS7843適合用在四線制觸摸屏,它通過標準SPI協議和CPU通信,操作簡單,精度高,當觸摸屏被按下時則ADS7843向CPU發中斷請求,CPU接到請求后,應延時一下再響應其請求,來消除抖動使得采樣更準確。ADS7843特點如下:四線電阻式觸摸屏接口;單電壓供電,電壓范圍為2.7-5V;最高125kHz的轉
22、換速度;同步串行接口(SPI);12位或8位采樣精度;2個附加的A/D通道。12位的A/D最大支持4096x4096點陣的LCD,可以滿足大多數應用。多數嵌入式處理器包括S3C2410處理器都集成了同步串行接口(SPI),很容易與ADS7843直接相連。S3C2410處理器和ADS7843接口原理圖如圖2.3所示。圖2.3 S3C2410和ADS7843接口原理圖3 交叉編譯環境的建立3.1Linux交叉編譯環境簡介絕大多數Linux軟件開發都是以本機方式進行的,即采用本機(HOST)開發、調試、本機運行的方式。但這種方式不適合于嵌入式系統的軟件開發,因為對于嵌入式系統,沒有足夠的資源在開發板
23、上運行開發工具和調試工具。因此,通常采用一種交叉編譯調試的方式,建立交叉編譯環境的PC機稱為宿主機,而對應的開發板稱為目標板7,15。開發時,在運行Linux的宿主機上,使用宿主機的交叉編譯、匯編及連接工具生成可執行的二進制代碼(這種可執行代碼并不能在宿主機上執行,而只能在目標板上執行),然后把可執行文件下載到目標板上運行。調試時可以采用串口、以太網口等。在宿主機建立嵌入式Linux開發環境有以下幾個方案:(1)基于宿主機Windows操作系統下的Cygwin;(2)直接安裝Linux操作系統;(3)在Windows下安裝虛擬機后,再在虛擬機中安裝Linux操作系統;Cygwin只是模擬一個U
24、nix環境,雖然有助于初學者學習,但它所支持的命令不完整,它是一個不完整的Unix系統;直接安裝Linux則不用考慮兼容性問題,但設置較為復雜,很容易出錯;而在虛擬機里安裝的Linux是完整的,但要考慮和Windows的兼容問題。在綜合比較之下,采用第三種方案,即在宿主機Windows環境下安裝虛擬機,再在虛擬機中安裝Linux系統。3.2 開發環境的配置3.2.1配置NFS通過NFS方式建立宿主機和開發板的通訊是開發調試過程中常用的方法8。配置NFS網絡設置,包括配置IP地址、NFS服務、防火墻。開發板上固定的IP地址為,為了進行通訊,將宿主機上的IP設置成和開發板在同一網段,這里將虛擬機的
25、IP地址設置為。對于REDHAT9.0,它的默認設置是打開防火墻,對于外來的IP訪問它全部拒絕,因此在網絡設置完成后,應立即關閉防火墻。最后在NFS服務器的目錄中填入要共享的文件路徑/root/share,在宿主機中填入允許進行連接的主機IP地址192.168.0.*,并選擇允許客戶對共享目錄的操作為讀寫狀態(Read/Write)。由于Linux操作系統是裝在虛擬機上,所以這里有個IP設置的問題,起初以為虛擬機和主機的IP應該設置為相同的,但這樣始終不能用NFS將開發板掛載到Linux系統上??偸翘崾荆篣nknown 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后來查了計算機網絡方面的資料,才知道因為裝虛擬機時網絡是橋接的,相當于建立了一個局域網,需要給虛擬機和主機分配不同的IP才能工作。3.2.2 配置MinicomMinicom是Linux下的通信
27、終端程序,通過minicom可以設置、監視串口工作狀態,接收、顯示串口收到的信息。在Linux操作系統的超級終端中輸入minicom即可進入minicom界面。先按住CtrlA,再按Z鍵可以進入主配置界面。其中主要的設置為:端口號設置為/dev/ttsS0(即使用串口1);波特率設置為115200;硬件流和軟件流都改為NO8。3.3 開發工具的安裝開發工具主要包括針對目標板的編譯器gcc、目標板的二進制工具binutils、目標板的標準c庫glibc和目標板的Linux內核頭文件9。其中glibc和內核源代碼的版本必須與目標板上實際使用的版本保持一致。其主要步驟為:(1)下載binutils、
28、gcc、glibs的源碼;(2)配置并編譯binutils,得到下一步要用到的匯編器和連接器;(3)配置并編譯gcc源代碼,生成gcc編譯器;(4)配置glibc并編譯生成glibc的c函數庫(5)再次配置并編譯gcc源代碼,生成其它語言的編譯器如:C等10,11。這是開發環境建立的整個過程。如果一步步來做是比較復雜的,一般可以從網上下載別人整理好的整個文件包。這里直接采用北京博創提供的工具包。4 基于Qt的圖形用戶界面設計圖形用戶界面GUI(Graphics User Interface)是迄今為止計算機系統中最為成熟的人機交互技術。嵌入式GUI的要求是簡單、直觀、可靠、占用資源小且反應快速
29、,以適應系統硬件資源有限的條件。另外,由于嵌入式系統硬件本身的特殊性,嵌入式GUI應具備高度可移植性與可裁剪性,以適應不同的硬件條件和使用需求8,12??傮w來講,嵌入式GUI應具備以下特點:體積小;運行時耗用系統資源??;上層接口與硬件無關,高度可移植性;在某些應用場合應具備實時性。Qt/Embedded是最優秀的嵌入式GUI開發工具之一,在畢業設計中采用它來編寫用于觸摸屏的圖形界面。4.1 Qt體系結構4.1.1Qt架構 Qt/Embedded是著名的Qt庫開發商Trolltech公司開發的面向嵌入式系統的Qt版本。它延續了Qt在X W
30、indow上的強大功能,在底層摒棄了函數庫Xlib,僅采用幀緩沖作為底層圖形接口。同時,將外部輸入設備抽象為keyboard和mouse輸入事件,底層接口支持鍵盤、GPM 鼠標、觸摸屏以及用戶自定義的設備等。Qt/ Embedded 是完全面向對象的,很容易擴展,提供了豐富的窗口部件集,并且允許真正的組件編程,庫的穩定性和健壯性比較好。它的類庫接口完全兼容于同版本的Qt- X11 ,使用X Window下的開發工具可以直接開發基于Qt/Embedded的應用程序GUI界面12。Qt/Embedded和Qt的體系結構比較如圖4.1所示。應用源程序Qt APIQt/EmbeddedQt/X11 Q
31、t/XLibX Window Server幀緩沖Linux 內核圖4.1 Qt/Embedded與Qt/X11的比較 Qt/Embedded的底層圖形引擎基于framebuffer,framebuffer出現在以上內核的版本當中的一種驅動程序接口。這種接口采用mmap系統調用,將顯示設備抽象為幀緩沖區。用戶可以將它看成是顯示內存的一個映象,將其映射到進程地址空間之后,就可以直接進行讀寫操作了,而寫操作可以立即反映在屏幕上。Framebuffer驅動程序是最重要的驅動程序之一,正是這個驅動程序才能使系統屏幕顯示內容。其實現分為兩個方面:一是對LCD及其相關部件的
32、初始化,包括畫面緩沖區的創建和對DMA通道的設置;二是對畫面緩沖區的讀寫,具體到代碼為read、write等系統調用接口。圖4.2為Qt/Embedded的實現結構。Qt/Embedded 應用程序 QWSSever圖形事件服務Qt/Embeddedframebuffer輸入設備驅動 Linux操作系統底層硬件平臺圖4.2 Qt/Embedded的實現結構4.1.2 Qt文件架構Qt由三個文件構成:、 qt-embedded-和。 tamkeQt-X11Qt/EmbeddedQtopia生成和管理MakefileTMAKEDIR TAMKEPATHQvfb虛擬幀緩沖工具U
33、ic用戶界面編譯器Designer Qt應用程序設計工具PATH LD_LIBRARY_PATHQt庫支持Libqte.soQTEDIR PATH LD_LIBRARY_PATH應用程序開發包桌面環境QPEDIR PATH LD_LIBRARY_PATH圖4.3 Qt包含的工具及環境變量聲明其中tmake是qt應用程序的編譯工具,用于生成Makefile文件;x-11主要包含三個工具moc、uic和designer,moc用于Qt C擴展的metra-object編譯器,uic從XML文件生成代碼的用戶界面編譯器,而designer是用于設計窗口組件的應用程序。Qt/Embedde
34、d不僅提供了所有qt程序需要的庫文件,還提供了虛擬幀緩沖qvfb(qt virtual frame buffer),qvfb是X窗口用來運行和測試 Qtopia應用程序的系統程序,qvfb使用了共享存儲區域(虛擬的幀緩沖)來模擬幀緩沖并且在一個窗口中(qvfb)模擬一個應用來顯示幀緩沖,顯示的區域被周期性的改變和更新。通過指定顯示設備的寬度和顏色深度,并且虛擬出來的緩沖幀和物理的顯示設備在每個像素上保持一致。使得我們在每次調試應用時不需要經常刷新開發板上的FLASH存儲空間,從而加速了應用程序的開發。4.2 Qt環境的建立在Linux系統的/root目錄下,建立子目錄2410qt,并
35、將上面提到的三個文件復制到/root/2410qt中,進入該目錄,將三個壓縮文件包分別解壓:tar xzf qt-x11-.tar.gztar xzf qt-embedded-并分別設置環境變量:export QTEDIR=$PWD/qt-export TMAKEDIR=$PWD/tmake-1.13export QT2DIR=$PWD/qt-環境變量的設置是非常重要的,它關系到能否正確的安裝及編譯這些安裝包,其中:TMAKEDIR:指向用于編譯Qt/Embedded的Tmake工具QT2DIR:指向qt-的文件夾QTEDIR:指向qt-的文件夾當環境變量設置正確后,就可以對它們分別進行編譯了
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開始幾次編譯時,對整個編譯過程還不了解,在設置環境變量時容易漏掉“$”符號或是拼寫錯誤,而且擔心make失敗后,中間生成的文件會對下一次make產生影響。幾天時間后,編譯了近十次才完全編譯成功。其中編譯qvfb時,在輸入make指令后,提示“Nothing to be done for all”,查找資料后知道要在make前先執行make clean命令,以清除上次編譯產生的中間文件。當編譯全部通過后,就可以在qvfb上來檢測自己編寫的應用程序,其步驟如
39、下:(1)生成工程文件(.pro)每一個Qt 程序都對應著一個工程文件,因為tmake工具要借此工程生成相應的Makefile文件。生成工程文件需要使用progen工具,它的位置在$TMAKEDIR/bin下,使用progen生成工程文件的方法如下:$TMAKEDIR/bin/progen t app.t o (2)生成Makefile 文件Qt提供了生成Makefile文件的工具tmake,這極大地方便了應用程序的開發,節省了大量的時間,而且還可根據不同平臺的需要生成適合于不同平臺的Makefile文件。在命令行中輸入如下命令:$TMAKEDIR/bin/tmake o M
40、akefile 完成上面的步驟以后就可以在當前的目錄中生成一個Makefile文件,之后在命令行中輸入make命令就可以對整個程序進行編譯鏈接了。最終可以生成一個二進制的可執行文件,其在qvfb中的顯示結果如圖4.4所示。圖4.4 hello Qt/Embedded在qvfb中的顯示結果4 .3 Qt Designer的使用Qt Designer是一個GUI工具,它可以幫助我們來加快編寫Qt應用程序的速度。利用Qt Designer可以用一種所見既所得的方式來生成Qt程序GUI 圖形界面的程序源碼,并且只需要手工編寫一個main函數就可以進行編譯了。利用Qt Designer
41、可以非常快速的學會Qt,但是在編寫大型應用程序時并不使用Qt Designer,這是因為Qt Designer所產生的程序源碼有些繁瑣,運行起來也比較慢,因此,只是借助Qt Designer來更好的理解和學習Qt,不是直接去運行Qt Designer 生成的程序源碼。Qt應用程序的完成包括以下幾個步驟:(1)創建和初始化子部件(2)設置子部件的布局(3)設置Tab鍵的次序(4)建立信號與插槽的連接將部件布置好后,就可以根據我們的需要來建立連接,Qt開創性的使用了信號與插槽機制,與傳統的回調函數方式不同,它是一種靈活、類型安全、快速、完全面向對象的C+機制。使用傳統的回調函數機制來關聯某段代碼和
42、和一個按鍵,需要有一個指向函數的指針,并且將這個指針地址傳給按鈕。當這個按鈕被按下,這個函數就會被執行。以前的工具包不能保證函數被執行時所傳遞的類型是正確的,這使得進程很容易崩潰。另一個問題是,這種回調方法緊緊得綁定了GUI得基本功能元素,使得很難進行獨立的分類開發。Qt的信號與插槽機制則不同,Qt部件(Widgets)事件發生時發出信號,如一個按鈕被點擊時會發出一個“clicked”信號。程序員可以選擇建立一個函數(稱為插槽)并調用connect( )來將這個信號與插槽連接起來。用戶在編程時可以將兩個對象捆綁在一起而不需要知道每個對象的各自的信息,而且可以自己創建信號與插槽,發射自己的信號等
43、等。Qt Designer最終生成的文件為.ui文件,之后用Qt提供的uic工具可以生成.h文件和.cpp文件。但只有這兩個文件程序還是不能運行的,還需要一個main.cpp文件才能進行編譯鏈接。到這一步編譯出來的Qt應用程序只能在宿主機上運行,若要移植到開發板上還要對Qt/Embedded重新編譯。其編譯步驟與前面編譯宿主機上的Qt/Embedded類似,唯一不同的是編譯器的設置:export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g+,即將平臺由linux-x86-g+改為linux-arm-g+。4.4Qtopia虛擬平臺建立Qtopia是Troll
44、Tech公司為采用嵌入式Linux系統的移動計算設備和手持設備而開發的綜合應用平臺,包含完整的應用層、靈活的用戶界面、窗口操作系統、應用程序啟動程序以及開發框架。它是基于Qt/Embedded編寫的應用程序環境,也是開放源碼的一套應用程序包和開發庫。使用Qt/Embedded不僅可以開發Qtopia也可以用來開發面向Qtopia的第三方軟件。它包括三個版本:Qtopia手機版Qtopia PDA版和Qtopia消費電子產品平臺。Qtopia虛擬平臺由文件、qtopia-free-source-.tar.gz、qt-embedded-2.3.10.tar.gz 和qt-x11-2.3.2 .ta
45、r.gz組成。其編譯方法和前面建立qt桌面運行環境時的方法類似,不過前面解壓出來的文件在這里不可以直接使用,必須重新解壓。這里多出了libqte庫文件和qtopia的編譯。其中在編譯qtopia時容易出現錯誤,主要是說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目錄下,同時還要復制幾個庫文件到開發板上。但是在調試過程中遇到了問題:實驗文檔上給出的是:將src/qtopia.sh 下載到目標機的/usr/bin 目錄下將src/e2fs-install/lib/libuuid.so*下載到目標機的/lib 目錄下將src/jpeg-install/lib/libjpeg.so*下載到目標機的/lib 目錄下通過NFS將
47、開發板掛載到宿主機后,依次執行: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的參數設置錯誤,可將cp的每個參數都試了仍然提示上面的錯誤。后來查了嵌入式文件系統的資料,知道yaffs文件系統的屬性是可讀、可寫、可修改的。而根文件系統是只讀的,/lib和/usr/bin都是屬于根文件系統,所以文件無法復制。后來發現是實驗文檔書寫有誤,應該把文件都復制到yaffs文件系統下:將src/qtopia.sh 下載到開發板的/mnt/yaffs/Qtopia 目錄下.將src/e2fs-install/lib/libuuid.so*下載到開發板的/mnt/yaffs/lib 目錄下將src/jpeg-install/lib/libjpeg.so*下載
49、到開發板的/mnt/yaffs/lib 目錄下經過改正,最終調試通過,解決了系統的問題。5 觸摸屏圖形操作界面的實現5.1 Linux設備驅動程序5.1.1設備驅動程序分類Linux中的驅動程序設計是嵌入式Linux開發中十分重要的部分,驅動程序是應用程序與硬件之間的一個中間軟件層。目前Linux 支持的設備驅動可分為三種:字符設備(character device)、塊設備(block deivce)和網絡接口設備(network interface)。(1)字符設備:所有能夠像字節流一樣訪問的設備比如文件等在Linux中都通過字符設備驅動程序來實現。在Linux中它們也被映射為文件系統的一
50、個節點,常放置在/dev目錄下。字符設備驅動程序一般要包含open,close,read,write 等幾個系統調用。(2)塊設備:Linux的塊設備通常是指諸如磁盤,內存,Flash等可以容納文件系統的存儲設備。與字符設備類似,塊設備也是通過文件系統來進行訪問,它們之間的區別僅僅在于內核內部管理數據的方式不同。它也允許像字符設備一樣的訪問,可以一次傳遞任意多的字節。(3)網絡接口設備:網絡接口設備是Linux中比較復雜的一種設備,通常它們指的是硬件設備,但有時也可是一個軟件設備(如回環接口loopback)。它們由內核中網絡子系統驅動,負責發送和接收數據包。它們的數據傳送往往并不是面向流的(
51、少數如telnet,FTP等是面向流的),所以不容易把它們映射到一個文件系統的節點上。在Linux中采用給網絡接口設備分配一個唯一名字的方法來訪問該設備13。Linux設備驅動程序的構成應用程序一般有一個main函數,從頭到尾執行一個任務;驅動程序卻不同,它沒有main函數,通過使用宏module_init(初始化函數名)將初始化函數加入內核全局初始化函數列表中,在內核初始化時執行驅動的初始化函數,從而完成驅動的初始化和注冊,之后驅動便停止等待被應用軟件調用。驅動程序中有一個宏moudule_exit(退出處理函數名)注冊退出處理函數。它在驅動退出時被調用。應用程序可以和GLIBC庫連接,可以
52、包含標準的頭文件,比如<stdio.h>,在驅動程序中是不能使用標準C庫的,包含的頭文件只能是內核的頭文件。內核需要一對稱作主次設備號的參數,才能唯一標識一個設備。主設備號相同的設備使用相同的驅動程序,次設備號用于區分具體設備的實例。設備操作宏MAJOR()和MINOR()可分別用于獲取主次設備號設備類型、主次設備號是內核與設備驅動程序通信時所使用的,但是對于開發應用程序的用戶來說比較難于理解和記憶,所以Linux使用了設備文件的概念來統一對設備的訪問接口,在引入設備文件系統(devfs)之前Linux將設備文件放在/dev目錄下,設備的命名一般為設備文件名加上數字或字母表示的子類
53、。在Linux-2.4內核中引入了設備文件系統 (devfs),所有的設備文件作為一個可以掛裝的文件系統,這樣就可以被文件系統進行統一管理。通常所說的設備驅動程序接口是指結構file_operations,它定義在include/linux/fs.h中。完整的file_operations數據結構為: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內核的重要數據結構,它也是file、inode結構的重要成員,在嵌入式系統的開發中一般僅僅實現其中幾個接口函數:read、write、ioctl、open、release,就可以完成應用系統需要的功能。static struct file_operations _fops = 完成了將驅動函數映射為標準接口,devfs_register()和register_chrdev()函數完成將驅動向內核注冊。驅動程序的使用有read、write、ioctl、open、release等方法。(1)Open 方法Open方法提供給驅動程序初始化設備的能力,從而為以后的設備操作做好準備,此外open操作一般還會遞增使用計數,用以防止文件關閉前模塊被卸載出內核。在大多數驅動程序中Open方法應完成如下工作:1)遞增使用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工資報酬勞動合同協議書
- 物流開票協議書
- 超市采購豬肉合同協議
- 車隊安全生產協議書范本
- 日歐貿易協議書
- 企業IT技術支持服務協議
- 返還房產協議書范本
- 車庫設備回收合同協議
- 軟件系統維護合同協議
- 人員臨時聘用合同
- 五年級下冊異分母分數加減法練習200題有答案
- UL489標準中文版-2019斷路器UL標準中文版
- 【MOOC】建筑結構概論-河南理工大學 中國大學慕課MOOC答案
- 我的家鄉江西吉安
- 肺栓塞病人的術后護理
- DB21-T 1642-2024 鎂質耐火原料及制品單位產品能源消耗限額
- 機場地震應急處理與疏散預案
- 《阻燃材料與技術》課件 顏龍 第3、4講 阻燃基本理論、阻燃劑性能與應用
- 服務禮儀培訓課件
- 2024年全國《勞動教育》基礎知識考試題庫與答案
- 維修電工二實操評分表講解
評論
0/150
提交評論