版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、目 錄第1章 嵌入式linux觸摸屏驅(qū)動(dòng)程序設(shè)計(jì)11.1 課程設(shè)計(jì)的目的11.2 課程設(shè)計(jì)要求1第二章 課程設(shè)計(jì)平臺(tái)構(gòu)建與流程22.1 嵌入式系統(tǒng)開發(fā)平臺(tái)構(gòu)建22.1.1 cygwin 開發(fā)環(huán)境22.1.2 Linux 開發(fā)環(huán)境42.1.3 Embest IDE 開發(fā)環(huán)境42.2 觸摸屏設(shè)計(jì)流程42.3 課程設(shè)計(jì)硬件結(jié)構(gòu)與工作原理52.3.1 硬件結(jié)構(gòu)概述52.3.2 觸摸屏工作原理6第三章 Bootloader移植與下載83.1 Vivi 源代碼的安裝83.2 Vivi源代碼分析93.3 Vivi 源代碼的編譯與下載9第四章 Linux內(nèi)核移植與下載104.1 Linux 內(nèi)核源代碼的安裝1
2、14.2 Linux內(nèi)核源代碼分析與移植124.3 Linux內(nèi)核編譯與下載12第五章 觸摸屏功能模塊程序設(shè)計(jì)與交叉編譯145.1 功能模塊驅(qū)動(dòng)程序設(shè)計(jì)14觸摸屏功能模塊交叉編譯19第六章 根文件系統(tǒng)建立與文件系統(tǒng)下載206.1 Cramfs根文件系統(tǒng)分析206.2 文件系統(tǒng)映像文件生成206.3 功能模塊運(yùn)行與調(diào)試22第七章 課程設(shè)計(jì)總結(jié)與體會(huì)26第1章 嵌入式linux觸摸屏驅(qū)動(dòng)程序設(shè)計(jì)1.1 課程設(shè)計(jì)的目的在開發(fā)基于Linux的嵌入式系統(tǒng)前需要首先建立嵌入式系統(tǒng)的開發(fā)環(huán)境,并制定嵌入式系統(tǒng)上的Linux內(nèi)核。本課程設(shè)計(jì)的主要目的是:1)進(jìn)一步了解嵌入式開發(fā)工具鏈的構(gòu)造過程;2)掌握開發(fā)主
3、機(jī)與嵌入式系統(tǒng)通信的方法;3)通過實(shí)際程序設(shè)計(jì)和調(diào)試,逐步掌握模塊化程序設(shè)計(jì)方法和調(diào)試技術(shù),提高閱讀和修改程序的能力;4)通過完成一個(gè)嵌入式linux系統(tǒng)開發(fā)的完整過程,使我們了解開發(fā)嵌入式linux應(yīng)用系統(tǒng)的全過程,為今后學(xué)習(xí)打下基礎(chǔ),積累實(shí)際操作的經(jīng)驗(yàn)。1.2 課程設(shè)計(jì)要求1)理解基于Linux的嵌入式系統(tǒng)交叉開發(fā)環(huán)境,對嵌入式系統(tǒng)的開發(fā)流程有詳細(xì)的了解;2)掌握開發(fā)工具鏈的構(gòu)建方法,能獨(dú)立進(jìn)行系統(tǒng)開發(fā)操作;3)掌握Linux的常用命令,在linux系統(tǒng)下能熟練的使用這些常用命令;4)熟悉linux內(nèi)核的知識(shí)以及原理,掌握定制Linux內(nèi)核的方法;5)基于Linux操作系統(tǒng),以及Emest
4、 III實(shí)驗(yàn)箱,利用觸摸屏返回觸點(diǎn)坐標(biāo)值及動(dòng)作信。坐標(biāo)及動(dòng)作的具體顯示:觸摸筆動(dòng)作,觸點(diǎn)X坐標(biāo)值,觸點(diǎn)Y坐標(biāo)值。第二章 課程設(shè)計(jì)平臺(tái)構(gòu)建與流程2.1 嵌入式系統(tǒng)開發(fā)平臺(tái)構(gòu)建 cygwin 開發(fā)環(huán)境1、運(yùn)行Cygwin 安裝程序,然后選擇“Install from Local Directory“,選擇“下一步”,2、選擇Cygwin 的安裝目錄,注意Cygwin 的安裝目錄必須位于硬盤NTFS 分區(qū)(且盡量不要使用系統(tǒng)C 分區(qū)),否則會(huì)影響文件屬性和權(quán)限操作,可能導(dǎo)致錯(cuò)誤的結(jié)果。選擇Unix 文本文件類型進(jìn)行安裝,直接選擇“下一步”后,則會(huì)把Unix 格式的cygwin 系統(tǒng)安裝到NTFS 格
5、式的D 分區(qū)中,且安裝目錄為D:cygwin。選擇安裝目錄安裝軟件包存放目錄。3、選擇Cygwin 安裝包所在的目錄,可以是光盤也可以是本地硬盤分區(qū)。如E:/Cygwin。選擇“下一步”繼續(xù)安裝:4、選擇軟件安裝項(xiàng)目。用鼠標(biāo)單擊在安裝項(xiàng)目左邊“ Default”字樣的位置,可以調(diào)整該軟件項(xiàng)目的安裝設(shè)置,可能出現(xiàn)的狀態(tài)有四種:Default - 該項(xiàng)目根據(jù)默認(rèn)狀態(tài)處理,可能被安裝,也可能不安裝Install - 安裝該項(xiàng)目Reinstall - 重新安裝該項(xiàng)目Uninstall - 移除該項(xiàng)目5、對于cygwin 的軟件項(xiàng)目,如果完全安裝可能需要1GB 以上空間,對于不想安裝的項(xiàng)目可以選擇狀態(tài)為
6、Default。通常只選擇Linux 開發(fā)必要的選項(xiàng)即可,特別地需要全部安裝以下項(xiàng)目:Admin 包括啟動(dòng)服務(wù) cygrunsrv 等工具,NFS 啟動(dòng)必備Archive 壓縮解壓工具集Base 基本的 Linux 工具集Devel 開發(fā)工具集,包括 gcc、make 等開發(fā)工具Libs 函數(shù)庫Net 網(wǎng)絡(luò)工具集Shells 常用 Shell 工具集Utils 包括 bzip2 等實(shí)用工具集Cygwin 軟件包的選擇(注意:由于 cygwin 是Windows 環(huán)境下虛擬的Linux 開發(fā)環(huán)境,一般在ALL 處設(shè)置為Install狀態(tài),即全部安裝。所以要建立一個(gè)完整的Linux 開發(fā)調(diào)試環(huán)境,
7、加上存放編譯工具和例程的空間,至少需要一個(gè)容量在2GB 以上的分區(qū)。軟件包安裝完成后,根據(jù)提示信息進(jìn)行余下的操作,此后可以在PC 機(jī)上運(yùn)行Cygwin 了。6、安裝cygwin 安裝程序之外的工具軟件1)cygwin 環(huán)境下的NFS 服務(wù)器安裝運(yùn)行 cygwin 開發(fā)環(huán)境后,拷貝要安裝的NFS 服務(wù)器軟件包nfs-server-2.tar.bz2 到cygwin/tmp 目錄下。按以下進(jìn)行步驟安裝:(1)解壓安裝包 $ cd / 一定要回到根目錄下解壓安裝 NFS 服務(wù)器 $ tar xvjf /tmp/nfs-server-(2)配置NFS Server $ /usr/
8、bin/nfs-server-config執(zhí)行nfs-server-config 命令后會(huì)顯示安裝信息。(3)設(shè)置主機(jī)訪問控制編輯文件設(shè)置任何用戶都可以訪問nfs 服務(wù)時(shí),在文件中增加行:nfsd: ALL (文件中只增加這行即可)也可以特別指定某個(gè) IP 地址的用戶訪問nfs 服務(wù)時(shí),只需增加行如:nfsd: 192.192.192.100 (文件中只增加這行即可)如果特別指定某個(gè)子網(wǎng)地址的用戶訪問 nfs 服務(wù)時(shí),只需增加行如:nfsd: 1(文件中只增加這行即可)。編輯文件如果Cygwin 中沒有其他網(wǎng)絡(luò)服務(wù),則注釋本文件中的所
9、有行。(4)設(shè)置主機(jī)共享目錄編輯文件/etc/ exports可以分行輸入需要共享的路徑及目錄,共享一個(gè)/home/app 目錄增加類似以下的行:/home/app 192.192.192.0/255.255.255.0(rw, no_root_squash)表示在192.192.192 子網(wǎng)上共享/home/app 目錄,該目錄可讀寫(rw)。(5)啟動(dòng)NFS 服務(wù)用戶可以在 Cygwin 下執(zhí)行以下命令啟動(dòng)服務(wù): $> cygrunsrv -S portmap $> cygrunsrv -S nfsd $> cygrunsrv -S mountd也可以通過打開Window
10、s 控制面板管理工具服務(wù),選擇portmap 、mountd 和nfsd 服務(wù)并啟動(dòng),這等效以上三條啟動(dòng)命令。啟動(dòng)之后可以使用以下命令檢查服務(wù)是否成功運(yùn)行。 $> /usr/sbin/showmount如果輸出報(bào)告是某服務(wù)啟動(dòng)失敗,請直接回到根目錄/重新安裝NFS server 軟件包。 Linux 開發(fā)環(huán)境 開發(fā)嵌入式 Linux 系統(tǒng),其實(shí)最方便的還是構(gòu)建一個(gè)標(biāo)準(zhǔn)的Linux 開發(fā)環(huán)境,大大地方便Linux開發(fā)中的編譯調(diào)試等工作。同樣地,EduKit2410 的Linux 開發(fā)也可以在標(biāo)準(zhǔn)Linux 環(huán)境下進(jìn)行,比如選擇Red Hat 等優(yōu)秀的
11、系統(tǒng)。由于時(shí)間關(guān)系,我們暫不提供標(biāo)準(zhǔn)Linux 環(huán)境下的安裝及使用手冊。 Embest IDE 開發(fā)環(huán)境 Linux 的調(diào)試通常比較復(fù)雜,可以選擇的調(diào)試環(huán)境也很多。但由于Linux 系統(tǒng)內(nèi)核有包括全球在內(nèi)的技術(shù)工程師的維護(hù)和測試,需要我們在應(yīng)用產(chǎn)品開發(fā)時(shí)進(jìn)行調(diào)試的情況比較少,而且通常需要完成的是比較簡單的調(diào)試。在我們編譯調(diào)試好Linux 的啟動(dòng)代碼、內(nèi)核和文件系統(tǒng)后,還需要把相應(yīng)的映象文件固化到硬件系統(tǒng)上。像這樣的Linux 開發(fā)需要可以在Embest IDE for ARM 和Embest JTAG 仿真器組成的開發(fā)環(huán)境下進(jìn)行。構(gòu)建 Embest IDE 進(jìn)行Linux 調(diào)試環(huán)境的內(nèi)容可以參
12、考后面章節(jié)。一般需要Embest IDE forARM 軟件、Embest online Flash Programmer for ARM、Embest JTAG 仿真器(標(biāo)準(zhǔn)型/增加型/通常型),以及進(jìn)行調(diào)試時(shí)所需要的平臺(tái)初始化文件(命令腳本文件)和燒寫時(shí)平臺(tái)配置文件(*.cfg)。這些文件在隨開發(fā)板提供的光盤里一并提供了。2.2 觸摸屏設(shè)計(jì)流程觸摸屏設(shè)計(jì)流程圖:2.3 課程設(shè)計(jì)硬件結(jié)構(gòu)與工作原理 硬件結(jié)構(gòu)概述Embest EduKit-III教學(xué)實(shí)驗(yàn)平臺(tái)是一款功能強(qiáng)大的32位的嵌入式開發(fā)板,里面采用了SAMSUNG公司的以ARM7TDMI-S為內(nèi)核的處理器S3C44B0X,同時(shí)可以兼容S3
13、C2410,具有JTAG 調(diào)試等功能。板上提供了一些鍵盤、LED和串口等一些常用的功能模塊,并且具有IDE硬件接口,CF存儲(chǔ)卡接口、以太網(wǎng)接口和SD卡接口等等,對用戶在32位ARM嵌入式領(lǐng)域進(jìn)行開發(fā)實(shí)驗(yàn)非常方便。 Embest EduKit-III教學(xué)實(shí)驗(yàn)平臺(tái)主要功能模塊如下: 圖 ARM 開發(fā)板功能模塊S3C2410開發(fā)板具有8通道模擬輸入的10位CMOS模數(shù)轉(zhuǎn)換器(ADC)。它將輸入的模擬信號(hào)轉(zhuǎn)換為10位的二進(jìn)制數(shù)字代碼。在2.5MHz的A/D轉(zhuǎn)換器時(shí)鐘下,最大轉(zhuǎn)化速率可達(dá)到500KSPS。A/D轉(zhuǎn)換器是循環(huán)類型的,其支持片上采樣和保持功能,并支持掉電模式。S3C2410開發(fā)板的AIN7和
14、AIN5用于連接觸摸屏的模擬信號(hào)輸入。觸摸屏接口電路一般由觸摸屏,4個(gè)外部晶體管和一個(gè)外部電壓源組成。觸摸屏接口的控制和選擇信號(hào)(nYPON,YMON,nXPON和XMON)連接切換X坐標(biāo)和Y坐標(biāo)轉(zhuǎn)換的外部晶體管。模擬輸入引腳(AIN7,AIN5)則連接到觸摸屏引腳。觸摸屏的AIN7連接觸摸屏的X+引腳,而AIN5連接觸摸屏的Y+引腳的。要控制觸摸屏的引腳(X+,X-,Y+,Y-),就要應(yīng)用4個(gè)外部的晶體管,并采用控制的信號(hào)nYPON, YMON, nXPON和XMON來控制晶體管的打開與關(guān)閉。推薦如下的操作步驟:1)采用外部晶體管連接觸摸屏到S3C2410A的接口的電路。2)選擇分離的X/Y
15、軸坐標(biāo)轉(zhuǎn)換模式或者自動(dòng)(連續(xù)的)X/Y軸坐標(biāo)轉(zhuǎn)換模式來獲取觸摸點(diǎn)的X/Y坐標(biāo)。3)設(shè)置觸摸屏接口為等待中斷模式(注意,等待的是INT_TC中斷)。4)如果中斷(INT_TC)發(fā)生,那么立即激活相應(yīng)的AD轉(zhuǎn)換(分離的X/Y軸坐標(biāo)轉(zhuǎn)換或者自動(dòng)(連續(xù)的)X/Y軸坐標(biāo)轉(zhuǎn)換)。5)在得到觸摸點(diǎn)的X/Y軸坐標(biāo)值后,返回到等待中斷模式(第3步)。注意:1)外部電壓源是3.3V。2)外部晶體管的內(nèi)部阻抗應(yīng)該小于5 ohm。 觸摸屏工作原理觸摸屏控制接口包括一個(gè)外部晶體管控制邏輯和具有中斷產(chǎn)生邏輯的ADC接口邏輯。1)普通轉(zhuǎn)換模式普通轉(zhuǎn)換模式(AUTO_PST=0,XY_PST=0)是用作一般目的下的ADC轉(zhuǎn)換
16、。這個(gè)模式可以通過設(shè)置ADCCON和ADCTSC來進(jìn)行對AD轉(zhuǎn)換的初始化;而后讀取ADCDAT0(ADC數(shù)據(jù)寄存器0)的XPDATA域(普通ADC轉(zhuǎn)換)的值來完成轉(zhuǎn)換。 2)分離的X/Y軸坐標(biāo)轉(zhuǎn)換模式:X軸坐標(biāo)轉(zhuǎn)換和Y軸坐標(biāo)轉(zhuǎn)換。 X軸坐標(biāo)轉(zhuǎn)換(AUTO_PST=0且XY_PST=1)將X軸坐標(biāo)轉(zhuǎn)換數(shù)值寫入到ADCDAT0寄存器的XPDATA域。轉(zhuǎn)換后,觸摸屏接口將產(chǎn)生中斷源(INT_ADC)到中斷控制器。 Y軸坐標(biāo)轉(zhuǎn)換(AUTO_PST=0且XY_PST=2)將X軸坐標(biāo)轉(zhuǎn)換數(shù)值寫入到ADCDAT1寄存器的YPDATA域。轉(zhuǎn)換后,觸摸屏接口將產(chǎn)生中斷源(INT_ADC)到中斷控制器。 3)自動(dòng)
17、(連續(xù))X/Y軸坐標(biāo)轉(zhuǎn)換模式。 自動(dòng)(連續(xù))X/Y軸坐標(biāo)轉(zhuǎn)換模式(AUTO_PST=1且XY_PST= 0)以下面的步驟工作: 觸摸屏控制器將自動(dòng)地切換X軸坐標(biāo)和Y軸坐標(biāo)并讀取兩個(gè)坐標(biāo)軸方向上的坐標(biāo)。觸摸屏控制器自動(dòng)將測量得到的X軸數(shù)據(jù)寫入到ADCDAT0寄存器的XPDATA域,然后將測量到的Y軸數(shù)據(jù)到ADCDAT1的YPDATA域。自動(dòng)(連續(xù))轉(zhuǎn)換之后,觸摸屏控制器產(chǎn)生中斷源(INT_ADC)到中斷控制器。 4)等待中斷模式 當(dāng)觸摸屏控制器處于等待中斷模式下時(shí),它實(shí)際上是在等待觸摸筆的點(diǎn)擊。在觸摸筆點(diǎn)擊到觸摸屏上時(shí),控制器產(chǎn)生中斷信號(hào)(INC_TC)。中斷產(chǎn)生后,就可以通過設(shè)置適當(dāng)?shù)霓D(zhuǎn)換模式
18、(分離的X/Y軸坐標(biāo)轉(zhuǎn)換模式或自動(dòng)X/Y軸坐標(biāo)轉(zhuǎn)換模式)來讀取X和Y的位置。 5)靜態(tài)(Standby)模式 當(dāng)ADCCON寄存器的STDBM位被設(shè)為1時(shí),Standby模式被激活。在該模式下,A/D轉(zhuǎn)換操作停止,ADCDAT0寄存器的XPDATA域和ADCDAT1寄存器的YPDATA(正常ADC)域保持著先前轉(zhuǎn)換所得的值。第三章 Bootloader移植與下載3.1 Vivi 源代碼的安裝1、拷貝開發(fā)板光盤Linux Source 文件夾下的vivi-20030929.tar.bz2 文件和Sourcepatch整個(gè)文件夾到$SOURCEDIR/目錄下;2、進(jìn)入cygwin,Vivi 源代碼
19、的安裝:$> source /tmp/edukit-2410/set_env_linux.sh Linux 編譯環(huán)境變量設(shè)置$> cd $WORKDIR$> tar -xvjf /tmp/edukit-2410/vivi-2$> ls vivi 為$WORKDIR 目錄下其他內(nèi)容正確解壓后,可以看到相比之前多了一個(gè)vivi目錄,即vivi源代碼的安裝目錄,后面的vivi配置及編譯都得進(jìn)入vivi目錄進(jìn)行。3、再為EduKit2410 實(shí)驗(yàn)系統(tǒng)打入vivi源代碼的補(bǔ)丁文件:$> cd vivipatching file Makefile 為其他輸出內(nèi)容,無錯(cuò)誤提示信
20、息3.2 Vivi源代碼分析Vivi的代碼包括:arch、documentation、drivers、include、init、scripts、test、util等幾個(gè)目錄,共200多條文件。Vivi主要包括下面幾個(gè)目錄:Arch:此目錄中包含了vivi支持的沒標(biāo)板的子目錄,其中中有s3c2410x一個(gè)目錄。Drivers:此目錄中包含了引腳內(nèi)核需要的驅(qū)動(dòng)程序,其中只有mtd和merial兩個(gè)子目錄,mtd子目錄下又有maps、nand、mor三個(gè)子目錄,vivi支持從不用的存儲(chǔ)器啟動(dòng)。Init:存放初始化代碼,這個(gè)目錄只有main.c和version.c兩個(gè)文件。和普通的C程序一樣,vivi
21、將從main函數(shù)開始執(zhí)行。 Include:此目錄是頭文件的公共目錄,s3c3C2410處理器內(nèi)部寄存器的定義,定義了與開發(fā)板相關(guān)的資源配置參數(shù),我們往往只需要修改這個(gè)文件就可以配置目標(biāo)板的參數(shù),如波特率、引導(dǎo)參數(shù)、物理內(nèi)存映射等。Lib:各個(gè)平臺(tái)公共接口代碼集。比如time.c里的udelay()和mdelay()。SMDK2410文件:General setup選項(xiàng)為常規(guī)安裝選項(xiàng),包括版本信息、虛擬內(nèi)存、進(jìn)程間通信、系統(tǒng)調(diào)用、審計(jì)支持等基本內(nèi)核配置選項(xiàng)。下面介紹常規(guī)安裝選項(xiàng)下主要子選項(xiàng)的配置方法。Loadable module support即引導(dǎo)模塊支持,該選項(xiàng)包括加載模塊、卸載模塊、模
22、塊校驗(yàn)、自動(dòng)加載模塊等引導(dǎo)模塊配置相關(guān)子選項(xiàng)。本節(jié)主要介紹引導(dǎo)模塊支持子選項(xiàng)的配置方法。Networking support即網(wǎng)絡(luò)支持,該選項(xiàng)配置的是網(wǎng)絡(luò)協(xié)議,內(nèi)容龐雜,這里就不一一介紹了。只要對網(wǎng)絡(luò)協(xié)議有所了解,應(yīng)該可以看懂相關(guān)幫助文件。如果要開發(fā)嵌入式系統(tǒng)能像PC一樣使用各類網(wǎng)絡(luò)協(xié)議,則可以使用默認(rèn)選項(xiàng),其中,最常用的TCP/IP networking選項(xiàng)當(dāng)然要選擇。3.3 Vivi 源代碼的編譯與下載然后執(zhí)行以下命令進(jìn)行編譯:$> source /tmp/edukit-2410/set_env_linux.sh Linux 編譯環(huán)境變量設(shè)置$> cd $WORKDIR/viv
23、i$> make clean$>make menuconfig輸入配置smdk2410:Nand boot或smdk2410-amd:Nor Flash boot其中,運(yùn)行make menuconfig 后,選擇Load an Alternate Configuration file,配置文件名稱如下:smdk2410:編譯vivi 在Nand Flash(K9S5608)中運(yùn)行;smdk2410-amd:編譯vivi 在Nor Flash(AM29LV160DB)中運(yùn)行。這兩個(gè)配置文件在usrlocalsrcedukit-2410viviarchdef-configs中,須復(fù)制到
24、usrlocalsrcedukit-2410vivi中;或者可以在menuconfig 中輸入全部路徑。編譯過程中沒有出現(xiàn)錯(cuò)誤,則編譯后的執(zhí)行文件存放usrlocalsrcedukit-2410vivi目錄,文件名為vivi。圖編譯成功截圖:圖第四章 Linux內(nèi)核移植與下載4.1 Linux 內(nèi)核源代碼的安裝 1、拷貝開發(fā)板光盤Linux Source 文件夾下的linux-r.bz2 文件(和Sourcepatch 整個(gè)文件夾)到$SOURCEDIR/目錄下; 2、運(yùn)行cygwin,執(zhí)行以下命令完成cygwin 環(huán)境下的Linux源代碼的安裝: Linux編譯環(huán)境變量設(shè)置$> cd
25、$WORKDIR$> tar xvjf /tmp/edukit-2410/linux-rmk7-pxa1-mz5-i2c$> ls kernel 為$WORKDIR 目錄下其他內(nèi)容正確解壓后,相比之前可以看到多了一個(gè)kernel目錄,即kernel源代碼的安裝目錄,后面的Linux配置及編譯都得在kernel目錄進(jìn)行。 圖3、為EduKit2410 實(shí)驗(yàn)系統(tǒng)打入Linux 源代碼的補(bǔ)丁文件:$> cd kernel$>patch-p1</tmp/edukit-2410/patch/linux-patching file Makefilepatching file
26、arch/arm/boot/Makefile 為其他輸出內(nèi)容,無錯(cuò)誤提示信息4.2 Linux內(nèi)核源代碼分析與移植Linux提供三個(gè)不同的命令進(jìn)行Linux的配置,效果完全一樣: make config 控制臺(tái)命令行方式配置命令 make menuconfig 文本菜單方式配置命令 make xconfig X窗口圖形界面方式配置命令其他部分命令: Make mrproper 命令清除所有的舊的配置和舊的編譯目標(biāo)文件等。 Make dep 命令搜索Linux編譯輸出與源代碼之間的依賴關(guān)系、并生成依賴文件。 Make clean 清除以前構(gòu)造內(nèi)核時(shí)生成的所有目標(biāo)文件、模塊文
27、件和臨時(shí)文件。 Linux內(nèi)核的兩種啟動(dòng)過程:(1) Flash本地運(yùn)行方式:內(nèi)核的未經(jīng)壓縮的可執(zhí)行映像固化在Flash,系統(tǒng)啟動(dòng)時(shí)內(nèi)核在Flash中開始逐句執(zhí)行。(2) 壓縮內(nèi)核加載方式:內(nèi)核的壓縮映像固化在Flash上,系統(tǒng)啟動(dòng)時(shí)由附加在壓縮映像前的解壓復(fù)制程序讀取壓縮映像,在內(nèi)存中解壓后執(zhí)行,這種方式相對復(fù)雜,但是運(yùn)行速度更快。4.3 Linux內(nèi)核編譯與下載在Cygwin中依次執(zhí)行以下命令完成Linux的編譯過程:圖選擇Load confinguration from File項(xiàng),配置文件smdk2410new1的路徑是:tmpedukit-2410linuxkernelkernel,
28、名稱為smk2410new1。對內(nèi)核進(jìn)行配置:圖根據(jù)提示加載配置文件后,點(diǎn)擊“Save and Exit”按鈕,然后執(zhí)行下列命令:圖 編譯成功截圖圖 生成內(nèi)核映像文件: 第五章 觸摸屏功能模塊程序設(shè)計(jì)與交叉編譯5.1 功能模塊驅(qū)動(dòng)程序設(shè)計(jì) 1)程序設(shè)計(jì)流程圖如下:2)觸摸屏設(shè)備驅(qū)動(dòng)中數(shù)據(jù)結(jié)構(gòu)(1)觸摸屏的file_operationsstatic struct file_operations s3c2410_fops= owner: THIS_MODULE, open: s3c2410_ts_open, read: s3c2410_ts_read, release: s3c2410_ts_re
29、lease,#ifdef USE_ASYNC fasync: s3c2410_ts_fasync,/異步通知#endif poll: s3c2410_ts_poll,/輪詢;(2)觸摸屏設(shè)備結(jié)構(gòu)體的成員與按鍵設(shè)備結(jié)構(gòu)體的成員類似,也包含一個(gè)緩沖區(qū),同時(shí)包括自旋鎖、等待隊(duì)列和fasync_struct指針typedef struct unsigned int penStatus; /* PEN_UP, PEN_DOWN, PEN_SAMPLE */ TS_RET bufMAX_TS_BUF; /* protect against overrun(環(huán)形緩沖區(qū)) */ unsigned int he
30、ad, tail;/* head and tail for queued events (環(huán)形緩沖區(qū)的頭尾)*/ wait_queue_head_t wq; /* 等待隊(duì)列數(shù)據(jù)結(jié)構(gòu) spinlock_t lock; /* 自旋鎖#ifdef USE_ASYNC struct fasync_struct *aq;#endif#ifdef CONFIG_PM struct pm_dev *pm_dev; /友善之臂專有的,我后面的代碼刪除了這段#endif TS_DEV;(3)觸摸屏結(jié)構(gòu)體中包含的TS_RET值的類型定義,包含X、Y坐標(biāo)和狀態(tài)(PEN_DOWN、PEN_UP)等信息,這個(gè)信息會(huì)在用
31、戶讀取觸摸信息時(shí)復(fù)制到用戶空間 typedef struct unsigned short pressure; /* 壓力,這里可定義為筆按下,筆抬起,筆拖曳 unsigned short x; /* 橫坐標(biāo)的采樣值 unsigned short y; /* 縱坐標(biāo)的采樣值 unsigned short pad; /* 填充位 TS_RET;(4)在觸摸屏設(shè)備驅(qū)動(dòng)中,將實(shí)現(xiàn)open()、release()、read()、fasync()和poll()函數(shù),因此,其文件操作結(jié)構(gòu)體定義觸摸屏驅(qū)動(dòng)文件操作結(jié)構(gòu)體:static struct file_operations s3c2410_fops=
32、3)觸摸屏驅(qū)動(dòng)模塊加載和卸載函數(shù)(1)在觸摸屏設(shè)備驅(qū)動(dòng)的模塊加載函數(shù)中,要完成申請?jiān)O(shè)備號(hào)、添加cdev、申請中斷、設(shè)置觸摸屏控制引腳(YPON、YMON、XPON、XMON)等多項(xiàng)工作觸摸屏設(shè)備驅(qū)動(dòng)的模塊加載函數(shù):static int _init s3c2410_ts_init(void)觸摸屏設(shè)備驅(qū)動(dòng)模塊卸載函數(shù):static void _exit s3c2410_ts_exit(void)(2)可知觸摸屏驅(qū)動(dòng)中會(huì)產(chǎn)生兩類中斷,一類是觸點(diǎn)中斷(INT-TC),一類是X/Y位置轉(zhuǎn)換中斷(INT-ADC)。在前一類中斷發(fā)生后,若之前處于PEN_UP狀態(tài),則應(yīng)該啟動(dòng)X/Y位置轉(zhuǎn)換。另外,將抬起中斷
33、也放在INT-TC處理程序中,它會(huì)調(diào)用tsEvent()完成等待隊(duì)列和信號(hào)的釋放觸摸屏設(shè)備驅(qū)動(dòng)的觸點(diǎn)/抬起中斷處理程序static void s3c2410_isr_tc(int irq, void *dev_id, struct pt_regs *reg)當(dāng)X/Y位置轉(zhuǎn)換中斷發(fā)生后,應(yīng)讀取X、Y的坐標(biāo)值,填入緩沖區(qū)觸摸屏設(shè)備驅(qū)動(dòng)X/Y位置轉(zhuǎn)換中斷處理程序static void s3c2410_isr_adc(int irq, void *dev_id, struct pt_regs *reg)觸摸屏設(shè)備驅(qū)動(dòng)中獲得X、Y坐標(biāo) :static inline void s3c2410_get_XY
34、(void)(3)tsEvent最終為tsEvent_raw(),這個(gè)函數(shù)很關(guān)鍵,當(dāng)處于PEN_DOWN狀態(tài)時(shí)調(diào)用該函數(shù),它會(huì)完成緩沖區(qū)的填充、等待隊(duì)列的喚醒以及異步通知信號(hào)的釋放;否則(處于PEN_UP狀態(tài)),將緩沖區(qū)頭清0,也喚醒等待隊(duì)列并釋放信號(hào)。(4)在包含了對拖動(dòng)軌跡支持的情況下,定時(shí)器會(huì)被啟用,周期為10ms,在每次定時(shí)器處理函數(shù)被引發(fā)時(shí),調(diào)用start_ts_adc()開始X/Y位置轉(zhuǎn)換過程觸摸屏設(shè)備驅(qū)動(dòng)的定時(shí)器處理函數(shù)static void ts_timer_handler(unsigned long data)(5)在觸摸屏設(shè)備驅(qū)動(dòng)的打開函數(shù)中,應(yīng)初始化緩沖區(qū)、penStat
35、us和定期器、等待隊(duì)列及tsEvent時(shí)間處理函數(shù)指針。觸摸屏設(shè)備驅(qū)動(dòng)的打開函數(shù)static int s3c2410_ts_open(struct inode *inode, struct file *filp)4)觸摸屏設(shè)備驅(qū)動(dòng)的讀函數(shù)觸摸屏設(shè)備驅(qū)動(dòng)的讀函數(shù)實(shí)現(xiàn)緩沖區(qū)中信息向用戶空間的復(fù)制,當(dāng)緩沖區(qū)有內(nèi)容時(shí),直接復(fù)制;否則,如果用戶阻塞訪問觸摸屏,則進(jìn)程在等待隊(duì)列上睡眠,否則,立即返回-EAGAIN5)觸摸屏設(shè)備驅(qū)動(dòng)的輪詢與異步通知在觸摸屏設(shè)備驅(qū)動(dòng)中,通過s3c2410_ts_poll()函數(shù)實(shí)現(xiàn)了輪詢接口,這個(gè)函數(shù)的實(shí)現(xiàn)非常簡單。它將等待隊(duì)列添加到poll_table,當(dāng)緩沖區(qū)有數(shù)據(jù)時(shí),返
36、回資源可讀取標(biāo)志,否則返回0。觸摸屏設(shè)備驅(qū)動(dòng)的poll()函數(shù)static unsigned int s3c2410_ts_poll(struct file *filp, struct poll_table_struct *wait)。而為了實(shí)現(xiàn)觸摸屏設(shè)備驅(qū)動(dòng)對應(yīng)用程序的異步通知,設(shè)備驅(qū)動(dòng)中要實(shí)現(xiàn)s3c2410_ts_fasync()函數(shù),觸摸屏設(shè)備驅(qū)動(dòng)的fasync()函數(shù)static int s3c2410_ts_fasync(int fd, struct file *filp, int mode)6)應(yīng)用程序的調(diào)試使用s3c2410_ts.c觸摸屏驅(qū)動(dòng)編寫應(yīng)用程序,讀取觸摸屏的觸點(diǎn)坐標(biāo)值
37、及動(dòng)作信息(觸點(diǎn)x坐標(biāo)值,y坐標(biāo)及是否有壓力值press),并在串口中斷打印出來對觸摸屏設(shè)別的操作有打開設(shè)備,關(guān)閉設(shè)備,讀操作等。編寫應(yīng)用程序讀取觸摸屏的觸點(diǎn)坐標(biāo)值及動(dòng)作信息時(shí),只需利用觸摸屏驅(qū)動(dòng)程序便可實(shí)現(xiàn),先打開觸摸屏設(shè)備,然后調(diào)用讀函數(shù)即可。其中,觸摸筆動(dòng)作取值如下:#define PEN_UP 0 /* 觸摸筆抬筆,即觸摸屏不被壓下 */#define PEN_DOWN 1/* 觸摸筆下筆,即觸摸屏被壓下 */#define PEN_FLEETING 2/* 觸摸筆拖動(dòng) */結(jié)構(gòu)體定義如下:typedef struct unsigned short pressure;/* 觸摸筆動(dòng)作
38、*/ unsigned short x;/* 觸點(diǎn)x座標(biāo)值 */ unsigned short y;/* 觸點(diǎn)y座標(biāo)值 */ unsigned short pad;TS_RET;將編寫好的源文件hello.c(假設(shè)名稱)程序放在cygwin目錄中 圖交叉編譯生成文件圖第六章 根文件系統(tǒng)建立與文件系統(tǒng)下載6.1 Cramfs根文件系統(tǒng)分析cramfs目錄結(jié)構(gòu)介紹:一個(gè)完整的根文件系統(tǒng)通常包含以下幾個(gè)目錄:/bin 應(yīng)用程序存放目錄。/sbin 系統(tǒng)管理員服務(wù)程序,其中最重要的就是供內(nèi)核初始化之后執(zhí)行的/sbin/init 進(jìn)程。 /lib 存放程序運(yùn)行所需要的動(dòng)態(tài)庫。 /proc 系統(tǒng)狀態(tài)文件目
39、錄。 /dev 驅(qū)動(dòng)程序存放目錄。 /etc 系統(tǒng)配置文件及用戶數(shù)據(jù)存放目錄。 /mnt 用于設(shè)備安裝的目錄,通常包含etc子目錄和為塊設(shè)備安裝保留目錄。 /usr 用于存放用戶程序和配置文件的目錄,可以根據(jù)需要進(jìn)行設(shè)置。一般情況下都要把已經(jīng)規(guī)劃好的目錄結(jié)構(gòu)轉(zhuǎn)換成一個(gè)映象文件,即使用命令工具mkcram(cygwin下為mkcramfs.exe),把相應(yīng)的cramfs目錄樹壓縮為單一的映象文件。其命令格式為: mkcramfs -h -e edition -i file -n name dirname outfile 可以使用我們提供的mkcramfs.exe在cygwin下編譯生成文件系統(tǒng)映
40、象文件 root.cramfs,再固化到開發(fā)系統(tǒng)FLASH上運(yùn)行。6.2 文件系統(tǒng)映像文件生成1)構(gòu)建cramfs文件系統(tǒng)按照本節(jié)實(shí)驗(yàn)原理中自行構(gòu)建一個(gè)cramfs文件系統(tǒng)。將image中的root.cramfs.tar.bz2拷貝到$SOURCEDIR目錄,運(yùn)行cygwin,執(zhí)行以下命令解壓安裝:$>source /tmp/edukit-2410/set_env_linux.sh 為Linux編譯環(huán)境變量設(shè)置$>cd $WORKDIR/$>tar $>ls.root. root文件夾中就是我們想要的cramfs文件系統(tǒng)解壓成功如下: 圖6.2.1在root目錄中新建x
41、x文件夾,用于存放應(yīng)用程序 圖 2)編譯應(yīng)用程序?qū)⒕帉懞玫脑次募s.c(假設(shè)名稱)程序放在cygwin目錄中 圖生成文件:ts如下圖所示:3)拷貝測試程序到文件系統(tǒng)中,并編譯生成文件系統(tǒng)映象新文件系統(tǒng)的制作,把剛才編譯輸出的ts文件拷貝到文件系統(tǒng)所在的工作目錄root/bin目錄下,執(zhí)行以下命令生成新的文件系統(tǒng)映象:圖剛剛編譯生成的文件系統(tǒng)映象root.cramfs.new中已經(jīng)包含應(yīng)用程序。生成文件:6.3 功能模塊運(yùn)行與調(diào)試(1)vivi 的燒寫1)首先把SW104短接(從Nand Flash啟動(dòng)),運(yùn)行Embest online Flash Programmer for ARM(以上)
42、,點(diǎn)擊菜單Settings選擇Configure項(xiàng),配置當(dāng)前使用的Embest JTAG仿真器型號(hào)為PowerICEARM9,并設(shè)置相應(yīng)的參數(shù);2)點(diǎn)擊菜單File 選擇Open打開燒寫配置文件S3C,在Flash Programmer的Program頁中選擇要燒寫的文件:;3)點(diǎn)擊按鈕Progarm開始燒寫,直到燒寫成功;圖 4)連接串口線到PC 機(jī)COM1,運(yùn)行光盤中提供的Windows超級終端;5)把開發(fā)板重新加電,程序運(yùn)行后,在超級終端上可以看到串口輸出類似以下信息:圖6) 看到以上信息后,表示正在等待用戶從超級終端下載文件。這時(shí),請點(diǎn)擊超級終端菜單"傳送"選擇Xm
43、odem方式下載文件,點(diǎn)擊OK后等待下載燒寫結(jié)束即可。圖(2)linux 內(nèi)核的燒寫1)首先SW104設(shè)為短接(從Nand Flash 啟動(dòng)),并確定已經(jīng)燒寫,加電。2)在vivi啟動(dòng)等待中,敲入空格鍵進(jìn)入vivi界面環(huán)境,并輸入以下命令:vivi> load flash kernel x <回車> 燒寫更新內(nèi)核約4 分鐘即可燒寫完畢。圖3) 點(diǎn)擊超級終端菜單中的“傳送”,選“發(fā)送文件”zImage(選擇xModem 方式傳送)燒寫結(jié)束,重起實(shí)驗(yàn)板,觀測超級終端窗口提示信息就可以啟動(dòng)linux 內(nèi)核,但沒有因?yàn)槲募到y(tǒng),系統(tǒng)會(huì)提示出錯(cuò)信息。圖(3) cramfs 文件系統(tǒng)的燒寫1)首先SW104 設(shè)為短接(從Nand Flash 啟動(dòng)),確定已經(jīng)成功燒寫vivi和linux kernel,加電運(yùn)行可以看到vivi啟動(dòng)信息,輸入空格 進(jìn)入命令狀態(tài);2)雙擊運(yùn)行工程文件(將啟動(dòng)Embest IDE環(huán)境),點(diǎn)擊連接Remote connect,程序應(yīng)該正在運(yùn)行(此時(shí)命令按鈕STOP為紅色);在超級終端輸入help看看有沒有反應(yīng),如果沒反應(yīng),點(diǎn)擊IDE按鈕:Reset->Start(F5);再輸入help測試,直到有反應(yīng)為止;3)如果超級終端可以輸出一些信息,再點(diǎn)擊IDE中的Stop
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024屆廣東肇慶市高三4月質(zhì)量調(diào)研(二模)考試數(shù)學(xué)試題
- 餐飲店合同補(bǔ)充協(xié)議范本
- 財(cái)產(chǎn)處份協(xié)議書
- 亳州公證處合同公證收費(fèi)標(biāo)準(zhǔn)
- 北京市租房標(biāo)準(zhǔn)合同
- 山西省2024八年級物理上冊第三章物態(tài)變化第2節(jié)熔化和凝固第2課時(shí)熔化和凝固的應(yīng)用課件新版新人教版
- 設(shè)備維修班長述職報(bào)告
- 湖南省益陽市赫山區(qū)箴言龍光橋?qū)W校2024-2025學(xué)年四年級上學(xué)期期中考試數(shù)學(xué)試題(無答案)
- 《J類船用筒形觀察器》
- 廣西柳州市2024-2025學(xué)年七年級上學(xué)期11月期中考試數(shù)學(xué)試題(含答案)
- DB13 2863-2018 煉焦化學(xué)工業(yè)大氣污染物超低排放標(biāo)準(zhǔn)
- 四年級上冊數(shù)學(xué)課件 《平行與垂直》 人教版(共11張PPT)
- 出砂機(jī)理及防砂
- 火炬系統(tǒng)水封罐計(jì)算
- 奧托尼克斯計(jì)米器使用說明書
- GB∕T 15972.10-2021 光纖試驗(yàn)方法規(guī)范 第10部分:測量方法和試驗(yàn)程序 總則
- 怎樣寫好文學(xué)短評課件(15張PPT)
- 醫(yī)院卒中中心建設(shè)方案
- 第5課《食物中的營養(yǎng)》教學(xué)設(shè)計(jì)(教科版小學(xué)四年級上冊科學(xué)第一單元)
- 抗炎免疫藥物的研究進(jìn)展課件
- 大學(xué)新生社團(tuán)招新宣傳PPT模板課件
評論
0/150
提交評論