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

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、the S3C2410 Processor AbstractWith 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 su

4、itable 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 a

5、nd debugging 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 s

6、ource 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 superior choices in the current embedded operating systems.Q

7、t/Embedded 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 found

8、ation 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 Lin

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

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

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

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

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

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

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

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

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

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

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

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

21、轉(zhuǎn)換器和觸摸屏接口如圖2.2所示。其中AIN7連接觸摸屏的X+引腳,而AIN5連接觸摸屏的Y+引腳??刂朴|摸屏的引腳(X+、X-、Y+和Y-),要用到4個(gè)外部晶體管,并采用控制信號(hào)nYPON,YMON,nXPON和XMON來控制晶體管的打開與關(guān)閉。(2)外接觸摸屏轉(zhuǎn)換接口芯片的方式外接一個(gè)觸摸屏專用的控制芯片如ADS7843,ADS7843適合用在四線制觸摸屏,它通過標(biāo)準(zhǔn)SPI協(xié)議和CPU通信,操作簡(jiǎn)單,精度高,當(dāng)觸摸屏被按下時(shí)則ADS7843向CPU發(fā)中斷請(qǐng)求,CPU接到請(qǐng)求后,應(yīng)延時(shí)一下再響應(yīng)其請(qǐng)求,來消除抖動(dòng)使得采樣更準(zhǔn)確。ADS7843特點(diǎn)如下:四線電阻式觸摸屏接口;單電壓供電,電壓范

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

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

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

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

26、ption: nolock;Mount: nfs mount 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后來查了計(jì)算機(jī)網(wǎng)絡(luò)方面的資料,才知道因?yàn)檠b虛擬機(jī)時(shí)網(wǎng)絡(luò)是橋接的,相當(dāng)于建立了一個(gè)局域網(wǎng),需要給虛擬機(jī)和主機(jī)分配不同的IP才能工作。3.2.2

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

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

29、嵌入式GUI的要求是簡(jiǎn)單、直觀、可靠、占用資源小且反應(yīng)快速,以適應(yīng)系統(tǒng)硬件資源有限的條件。另外,由于嵌入式系統(tǒng)硬件本身的特殊性,嵌入式GUI應(yīng)具備高度可移植性與可裁剪性,以適應(yīng)不同的硬件條件和使用需求8,12??傮w來講,嵌入式GUI應(yīng)具備以下特點(diǎn):體積??;運(yùn)行時(shí)耗用系統(tǒng)資源?。簧蠈咏涌谂c硬件無關(guān),高度可移植性;在某些應(yīng)用場(chǎng)合應(yīng)具備實(shí)時(shí)性。Qt/Embedded是最優(yōu)秀的嵌入式GUI開發(fā)工具之一,在畢業(yè)設(shè)計(jì)中采用它來編寫用于觸摸屏的圖形界面。4.1 Qt體系結(jié)構(gòu) 4.1.1 Qt架構(gòu)     Qt/Embedded是著名的Qt庫開發(fā)商Trollt

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

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

32、系統(tǒng)屏幕顯示內(nèi)容。其實(shí)現(xiàn)分為兩個(gè)方面:一是對(duì)LCD及其相關(guān)部件的初始化,包括畫面緩沖區(qū)的創(chuàng)建和對(duì)DMA通道的設(shè)置;二是對(duì)畫面緩沖區(qū)的讀寫,具體到代碼為read、write等系統(tǒng)調(diào)用接口。圖4.2為Qt/Embedded的實(shí)現(xiàn)結(jié)構(gòu)。Qt/Embedded 應(yīng)用程序 QWSSever圖形事件服務(wù)Qt/Embeddedframebuffer輸入設(shè)備驅(qū)動(dòng) Linux操作系統(tǒng)底層硬件平臺(tái)圖4.2 Qt/Embedded的實(shí)現(xiàn)結(jié)構(gòu)4.1.2 Qt文件架構(gòu)Qt由三個(gè)文件構(gòu)成:、 qt-embedded-和。  tamkeQt-X11Qt/EmbeddedQtopia生成和管理Makefi

33、leTMAKEDIR TAMKEPATHQvfb虛擬幀緩沖工具Uic用戶界面編譯器Designer Qt應(yīng)用程序設(shè)計(jì)工具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主要包含三個(gè)工具moc、uic和designer,moc用于Qt C擴(kuò)展的metra-object編譯器,uic從XML文件生成代碼的用戶界面編譯器,而d

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

35、立在Linux系統(tǒng)的/root目錄下,建立子目錄2410qt,并將上面提到的三個(gè)文件復(fù)制到/root/2410qt中,進(jìn)入該目錄,將三個(gè)壓縮文件包分別解壓: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:指

36、向qt-的文件夾當(dāng)環(huán)境變量設(shè)置正確后,就可以對(duì)它們分別進(jìn)行編譯了。(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 QTDI

37、R=$QT2DIRexport PATH=$QTDIR/bin:$PATHexport 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/

38、bin:$PATHexport LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure -no-xft -qvfb -depths 4,8,16,32make開始幾次編譯時(shí),對(duì)整個(gè)編譯過程還不了解,在設(shè)置環(huán)境變量時(shí)容易漏掉“$”符號(hào)或是拼寫錯(cuò)誤,而且擔(dān)心make失敗后,中間生成的文件會(huì)對(duì)下一次make產(chǎn)生影響。幾天時(shí)間后,編譯了近十次才完全編譯成功。其中編譯qvfb時(shí),在輸入make指令后,提示“Nothing to be done for all”,查找資料后知道要在make前先執(zhí)行make clean命令,以清除上次編譯產(chǎn)生的中間文件。

39、當(dāng)編譯全部通過后,就可以在qvfb上來檢測(cè)自己編寫的應(yīng)用程序,其步驟如下:(1) 生成工程文件(.pro)每一個(gè)Qt 程序都對(duì)應(yīng)著一個(gè)工程文件,因?yàn)閠make工具要借此工程生成相應(yīng)的Makefile文件。生成工程文件需要使用progen工具,它的位置在$TMAKEDIR/bin下,使用progen生成工程文件的方法如下:$TMAKEDIR/bin/progen t app.t o (2) 生成Makefile 文件Qt提供了生成Makefile文件的工具tmake,這極大地方便了應(yīng)用程序的開發(fā),節(jié)省了大量的時(shí)間,而且還可根據(jù)不同平臺(tái)的需要生成適合于不同平臺(tái)的Makefile文

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

41、只需要手工編寫一個(gè)main函數(shù)就可以進(jìn)行編譯了。利用Qt Designer可以非??焖俚膶W(xué)會(huì)Qt,但是在編寫大型應(yīng)用程序時(shí)并不使用Qt Designer,這是因?yàn)镼t Designer所產(chǎn)生的程序源碼有些繁瑣,運(yùn)行起來也比較慢,因此,只是借助Qt Designer來更好的理解和學(xué)習(xí)Qt,不是直接去運(yùn)行Qt Designer 生成的程序源碼。Qt應(yīng)用程序的完成包括以下幾個(gè)步驟:(1) 創(chuàng)建和初始化子部件(2) 設(shè)置子部件的布局(3) 設(shè)置Tab鍵的次序(4) 建立信號(hào)與插槽的連接將部件布置好后,就可以根據(jù)我們的需要來建立連接,Qt開創(chuàng)性的使用了信號(hào)與插槽機(jī)制,與傳統(tǒng)的回調(diào)函數(shù)方式不同,它是一種靈

42、活、類型安全、快速、完全面向?qū)ο蟮腃+機(jī)制。使用傳統(tǒng)的回調(diào)函數(shù)機(jī)制來關(guān)聯(lián)某段代碼和和一個(gè)按鍵,需要有一個(gè)指向函數(shù)的指針,并且將這個(gè)指針地址傳給按鈕。當(dāng)這個(gè)按鈕被按下,這個(gè)函數(shù)就會(huì)被執(zhí)行。以前的工具包不能保證函數(shù)被執(zhí)行時(shí)所傳遞的類型是正確的,這使得進(jìn)程很容易崩潰。另一個(gè)問題是,這種回調(diào)方法緊緊得綁定了GUI得基本功能元素,使得很難進(jìn)行獨(dú)立的分類開發(fā)。Qt的信號(hào)與插槽機(jī)制則不同,Qt部件(Widgets)事件發(fā)生時(shí)發(fā)出信號(hào),如一個(gè)按鈕被點(diǎn)擊時(shí)會(huì)發(fā)出一個(gè)“clicked”信號(hào)。程序員可以選擇建立一個(gè)函數(shù)(稱為插槽)并調(diào)用connect( )來將這個(gè)信號(hào)與插槽連接起來。用戶在編程時(shí)可以將兩個(gè)對(duì)象捆綁在

43、一起而不需要知道每個(gè)對(duì)象的各自的信息,而且可以自己創(chuàng)建信號(hào)與插槽,發(fā)射自己的信號(hào)等等。 Qt Designer最終生成的文件為.ui文件,之后用Qt提供的uic工具可以生成.h文件和.cpp文件。但只有這兩個(gè)文件程序還是不能運(yùn)行的,還需要一個(gè)main.cpp文件才能進(jìn)行編譯鏈接。到這一步編譯出來的Qt應(yīng)用程序只能在宿主機(jī)上運(yùn)行,若要移植到開發(fā)板上還要對(duì)Qt/Embedded重新編譯。其編譯步驟與前面編譯宿主機(jī)上的Qt/Embedded類似,唯一不同的是編譯器的設(shè)置:export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g+,即將平臺(tái)由linux-x86-g+

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

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

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

47、-install/lib/libjpeg.so*下載到目標(biāo)機(jī)的/lib 目錄下通過NFS將開發(fā)板掛載到宿主機(jī)后,依次執(zhí)行:cp /root/share/qtopia.sh /usr/bincp /root/share/libuuid.so* /libcp /root/share/libjpeg.so* /lib終端上總提示錯(cuò)誤:cp: unable to open /lib/libuuid.so*:Operation not permitted cp: unable to open /lib/libjpeg.so.*: Operation not permitted cp: unable to

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

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

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

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

52、exit(退出處理函數(shù)名)注冊(cè)退出處理函數(shù)。它在驅(qū)動(dòng)退出時(shí)被調(diào)用。應(yīng)用程序可以和GLIBC庫連接,可以包含標(biāo)準(zhǔn)的頭文件,比如<stdio.h>,在驅(qū)動(dòng)程序中是不能使用標(biāo)準(zhǔn)C庫的,包含的頭文件只能是內(nèi)核的頭文件。內(nèi)核需要一對(duì)稱作主次設(shè)備號(hào)的參數(shù),才能唯一標(biāo)識(shí)一個(gè)設(shè)備。主設(shè)備號(hào)相同的設(shè)備使用相同的驅(qū)動(dòng)程序,次設(shè)備號(hào)用于區(qū)分具體設(shè)備的實(shí)例。設(shè)備操作宏MAJOR()和MINOR()可分別用于獲取主次設(shè)備號(hào)設(shè)備類型、主次設(shè)備號(hào)是內(nèi)核與設(shè)備驅(qū)動(dòng)程序通信時(shí)所使用的,但是對(duì)于開發(fā)應(yīng)用程序的用戶來說比較難于理解和記憶,所以Linux使用了設(shè)備文件的概念來統(tǒng)一對(duì)設(shè)備的訪問接口,在引入設(shè)備文件系統(tǒng)(de

53、vfs)之前Linux將設(shè)備文件放在/dev目錄下,設(shè)備的命名一般為設(shè)備文件名加上數(shù)字或字母表示的子類。在Linux-2.4內(nèi)核中引入了設(shè)備文件系統(tǒng) (devfs),所有的設(shè)備文件作為一個(gè)可以掛裝的文件系統(tǒng),這樣就可以被文件系統(tǒng)進(jìn)行統(tǒng)一管理。通常所說的設(shè)備驅(qū)動(dòng)程序接口是指結(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

54、(*read) (struct file *, char *, size_t, loff_t *);ssize_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);i

55、nt (*mmap) (struct file *, struct vm_area_struct *);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 *,

56、int, struct file_lock *);ssize_t (*readv) (struct file *, 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)(

57、struct file *, unsigned long, unsigned long, unsigned long, unsignedlong);file_operations是整個(gè)Linux內(nèi)核的重要數(shù)據(jù)結(jié)構(gòu),它也是file、inode結(jié)構(gòu)的重要成員,在嵌入式系統(tǒng)的開發(fā)中一般僅僅實(shí)現(xiàn)其中幾個(gè)接口函數(shù):read、write、ioctl、open、release,就可以完成應(yīng)用系統(tǒng)需要的功能。static struct file_operations _fops = 完成了將驅(qū)動(dòng)函數(shù)映射為標(biāo)準(zhǔn)接口,devfs_register()和register_chrdev()函數(shù)完成將驅(qū)動(dòng)向內(nèi)核注冊(cè)。驅(qū)動(dòng)程序的使用有read、write、ioct

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論