【正文】
行環(huán)境時的方法類似,不過前面解壓出來的文件在這里不可以直接使用,必須重新解壓。字符設(shè)備驅(qū)動程序一般要包含 open, close, read, write 等幾個系統(tǒng)調(diào)用。 通常所說的設(shè)備驅(qū)動程序接口是指結(jié)構(gòu) file_operations{},它定義在include/linux/。 25 ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int)。第一種方法效率較低,但在某些場合是唯一的方法。 表 等待中斷模式下的觸摸屏引腳狀況表 XP XM YP YM 等待中斷模式 上拉 高阻 AIN[5] GND (4) 靜態(tài)( standby)模式 當(dāng) ADCCON寄存器的 STDBM位被設(shè)為 1時, Standby模式被激活。 static struct file_operations s3c2410_fops = { owner: THIS_MODULE, open: s3c2410_ts_open, release: s3c2410_ts_release, }。 而 module_exit()函數(shù) 是驅(qū)動程序的退出函數(shù),在函數(shù)內(nèi)部 調(diào)用 s3c2410_ts_exit(),主要任務(wù)是撤銷驅(qū)動程序向內(nèi)核的登記以及釋放申請的中斷資源。 中 斷s p i n _ l o c k _ i r q ( )產(chǎn) 生 中 斷 前P e n S t a t u s = P E N U P ?關(guān) 中 斷延 時 1 u sP E N I R Q 引 腳 為 低 電 平開 中 斷s p i n _ l o c k _ i r q ( )返 回設(shè) 置P e n S t a t u s = P E N _ D O W N設(shè) 置 定 時 器 每5 0 m s 產(chǎn) 生 一 次 中 斷激 活 定 時 器NNYY 圖 中斷處理程序流程圖 調(diào)試時, 在 s3c2410_isr_tc()中設(shè)定了定時 器的定時時間為 50ms,并立即激活。其中對應(yīng)于鼠標(biāo)類設(shè)備的實(shí)現(xiàn)位于 src/kernel/。 同時 必須正確設(shè)定 QWS_MOUSE_PROTO環(huán)境變量,其格式是 QWS_MOUSE_PROTO=protocol:device,protocol一般是MouseMan、 IntelliMouse、 Microsoft等等。 需要注意的是, 雖然幾乎鼠標(biāo)類設(shè)備在功能上基本 一致,但由于觸摸屏和鼠標(biāo)底層接口并不一樣,會造成對上層接口的不一致。驅(qū)動程序通過 request_irq函數(shù)注冊并激活一個中斷處理程序 。 s3c2410_fops就是內(nèi)核對驅(qū)動的調(diào)用接口,完成了將驅(qū)動函數(shù)映射為標(biāo)準(zhǔn)接口。 wait_queue_head_t wq。 表 自動(連續(xù)) X/Y位置轉(zhuǎn)換模式 下的觸摸屏引腳狀況表 XP XM YP YM X 坐標(biāo)轉(zhuǎn)換 外部電壓 GND AIN[5] 高阻 Y 坐標(biāo)轉(zhuǎn)換 AIN[7] 高阻 外部電壓 GND (3) 等待中斷模式 當(dāng)觸摸屏控制器處于等待中斷模式下時,它實(shí)際上是在等待觸摸筆的點(diǎn)擊。 unsigned long copy_from_user(void *to,const void *from,unsigned long count)。 int (*fasync) (int, struct file *, int)。 內(nèi)核需要一對稱作主次設(shè)備號的 參數(shù) ,才能唯一標(biāo)識一個設(shè)備。 23 5 觸摸屏圖形操作界面的實(shí)現(xiàn) Linux 設(shè)備驅(qū)動程序 設(shè)備驅(qū)動程序 分類 Linux中的驅(qū)動 程序 設(shè)計(jì)是嵌入式 Linux開發(fā)中十分重要的部分 , 驅(qū)動程序是應(yīng)用程序與硬件之間的一個中間軟件層 。 它是基于 Qt/Embedded編寫的應(yīng)用程序環(huán)境,也是 開放源碼的一套應(yīng)用程序包和開發(fā)庫。 19 圖 hello Qt/Embedded在 qvfb中的 顯示結(jié)果 4 .3 Qt Designer 的使用 Qt Designer 是一個 GUI 工具 ,它 可以幫助我們來加快編 寫 Qt 應(yīng)用程序的速度。Framebuffer驅(qū)動程序是最重要的驅(qū)動程序之一,正是這個驅(qū)動程序才能使系統(tǒng)屏幕顯示內(nèi)容。 如果 一步步來做 是比較復(fù)雜的, 一般可以從網(wǎng)上下載別人整理好的整個文件包 。 開發(fā)環(huán)境 的 配置 配置 NFS 通過 NFS 方式建立 宿主機(jī) 和 開發(fā)板 的通訊是開發(fā)調(diào)試過程中常用的方法 [8]。 觸摸屏控制接口包括一個外部晶體管控制邏輯和 具有中斷產(chǎn)生邏輯的 ADC接口邏輯 ,其特性如下: 分辨率: 10位 ; 微分線性度誤差:+- LSB; 積分線性度誤差:+- LSB; 最大轉(zhuǎn)換速率: 500 KSPS; 觸摸屏 X+ Y+ X Y 9 低功耗; 供電電壓: ; 輸入模擬電壓范圍: ; 片上采樣保持功能 ; 普通轉(zhuǎn)換模式 ; 分離的 X/Y軸坐標(biāo)轉(zhuǎn)換模式 ; 自動(連續(xù)) X/Y軸坐標(biāo)轉(zhuǎn)換模式 ; 等待中斷模式 。用于 y 坐標(biāo)測量的導(dǎo)電層從上下兩端引出兩個電極,記為 Y+和 Y。目前已有超過 85﹪ 的無線通訊設(shè)備采用了 ARM 技術(shù), 手機(jī)中的 32 位 SIM 智能卡也采用了 ARM 技術(shù) [5], ARM 以其高性能和低成本,在該領(lǐng)域的地位日益鞏固。 Qtopia Porting 4 目 次 1 引言 ............................................................. 1 2 硬件平臺 ......................................................... 2 ARM 體系結(jié)構(gòu) ................................................ 2 S3C2410 處理器簡介 ......................................... 2 觸摸屏接口電路 ............................................. 3 3 交叉編譯環(huán)境的建立 .............................................. 7 Linux 交叉編譯環(huán)境簡介 ...................................... 7 開發(fā)環(huán)境的配置 ............................................. 7 開發(fā)工具的安裝 ............................................. 8 4 基于 Qt 的圖形用戶界面設(shè)計(jì) ...................................... 10 Qt 體系結(jié)構(gòu) ................................................ 10 Qt 環(huán)境的建立 .............................................. 12 Qt Designer 的使用 .......................................... 15 Qtopia 虛擬平臺建立 ........................................ 16 Qtopia 的移植 .............................................. 17 5 觸摸屏圖形操作界面的實(shí)現(xiàn) ....................................... 19 Linux 設(shè)備驅(qū)動程序 ......................................... 19 觸摸屏驅(qū)動程序分析 ........................................ 22 Qt/Eembedded 中的觸摸屏驅(qū)動接口 ............................ 28 Qt/Embedded 的觸摸屏驅(qū)動接口的設(shè)置 ........................ 30 驅(qū)動程序調(diào)試過程中出現(xiàn)的問題 .............................. 31 結(jié) 論 ............................................................. 34 致 謝 ............................................................. 35 參 考 文 獻(xiàn) ........................................................ 36 附錄 A 觸摸屏驅(qū)動部分源程序 ....................................... 37 5 1 引言 嵌入式系統(tǒng)就是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟、 硬件可裁剪 , 對功能可靠性、成本、體積和 功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng) [1]。因此 Linux是嵌入式操作系統(tǒng)的最佳選擇。因此 Linux 是 嵌入式 平臺上操作系統(tǒng)的最佳選擇。 紅外線觸摸屏屏價格低廉,但其外框易碎,容易產(chǎn)生光干擾,曲面情況下失真;電容屏設(shè)計(jì)理論好,但其 圖像 失真問題很難得到根本解決;表面聲波觸摸屏清晰抗暴,適于各種場合,缺憾是屏表面的水滴、塵土?xí)褂|摸屏變 地 遲鈍,甚至不工作;電阻式觸摸屏結(jié)構(gòu)簡單 ,成本低 廉,透光效果好,工作環(huán)境和外界完全隔離,不怕灰塵和水汽 , 并且 穩(wěn)定性高 。在 A/D轉(zhuǎn)換器時鐘下,最大轉(zhuǎn)換速率可達(dá)到 500KSPS。 圖 S3C2410和 ADS7843接口原理 圖 V C C1X+2Y+3X4Y5I N 37I N 48V R E F9V C C10P E N I R Q11DOUT12B U S Y13D I N14CS15D C L K16U 5 0 5F M 7 8 4 3V D D 3 3T C H Y +T C H X +T C H X T C H Y C 5 0 61 0 4C 5 0 51 0 4E I N T 5M I S O 0M O S I 0S P I C L K 0G P G 1 2 11 3 交叉編譯環(huán)境的建立 Linux 交叉編譯環(huán)境簡介 絕大多數(shù) Linux 軟件開發(fā)都是以 本機(jī) 方式進(jìn)行的,即 采用 本機(jī)( HOST)開發(fā)、調(diào)試、本機(jī)運(yùn)行的 方式。 在 Linux 操作系統(tǒng)的超級終端中輸入mini即可進(jìn)入 mini界面。同時,將外部輸入設(shè)備抽象為 keyboard和 mouse輸入事件 ,底層接口支持鍵盤、 GPM 鼠標(biāo)、觸摸屏以及用戶自定義的設(shè)備等。 (1) 編譯 cd $QT2DIR export TMAKEPATH=$TMAKEDIR/lib/linuxg++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure noxft make cp –arf bin/uic $QTEDIR/bin/ (2) 編譯 qvfb export TMAKEPATH=$TMAKEDIR/lib/linuxg++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH cd $QTEDIR/tools/qvfb /root/2410sQt/make mv qvfb $QTEDIR/bin/ 18 (3) 編譯 Qt/Embedded cd $QTEDIR export TMAKEPATH=$TMAKEDIR/lib/qws/linuxx86g++ export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure noxft qvfb depths 4,8,16,32 make 開始 幾次編譯時,對整個編譯過程還不了解,在設(shè)置環(huán)境變量時容易漏掉“ $”符號或是拼寫錯誤,而且擔(dān)心 make失敗后,中間生成的文件會對下一次make產(chǎn)生影響。程序員可以選擇建立一個函數(shù)(稱為插槽)并調(diào)用 connect( )來將這個信號與插槽連接起來。 在編譯完后通過 NFS將文件下載到/mnt/yaffs目錄 下,同時還要復(fù)制幾個庫文件到開發(fā)板上。它們由內(nèi)核中網(wǎng)