嵌入式Linux系統(tǒng)開發(fā)教程實(shí)驗(yàn)報告_第1頁
嵌入式Linux系統(tǒng)開發(fā)教程實(shí)驗(yàn)報告_第2頁
嵌入式Linux系統(tǒng)開發(fā)教程實(shí)驗(yàn)報告_第3頁
嵌入式Linux系統(tǒng)開發(fā)教程實(shí)驗(yàn)報告_第4頁
嵌入式Linux系統(tǒng)開發(fā)教程實(shí)驗(yàn)報告_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、嵌入式實(shí)驗(yàn)報告姓名:學(xué)號:學(xué)院: 日期: 實(shí)驗(yàn)一 熟悉嵌入式系統(tǒng)開發(fā)環(huán)境一、實(shí)驗(yàn)?zāi)康氖煜?Linux 開發(fā)環(huán)境,學(xué)會基于S3C2410 的Linux 開發(fā)環(huán)境的配置和使用。使用Linux的armv4l-unknown-linux-gcc 編譯,使用基于NFS 方式的下載調(diào)試,了解嵌入式開發(fā)的基本過程。二、實(shí)驗(yàn)內(nèi)容本次實(shí)驗(yàn)使用 Redhat Linux 9.0 操作系統(tǒng)環(huán)境,安裝ARM-Linux 的開發(fā)庫及編譯器。創(chuàng)建一個新目錄,并在其中編寫hello.c 和Makefile 文件。學(xué)習(xí)在Linux 下的編程和編譯過程,以及ARM 開發(fā)板的使用和開發(fā)環(huán)境的設(shè)置。下載已經(jīng)編譯好的文件到目標(biāo)開發(fā)板

2、上運(yùn)行。三、實(shí)驗(yàn)設(shè)備及工具硬件:UP-TECH S2410/P270 DVP 嵌入式實(shí)驗(yàn)平臺、PC 機(jī)Pentium 500 以上, 硬盤10G 以上。軟件:PC 機(jī)操作系統(tǒng)REDHAT LINUX 9.0超級終端(或X-shell)AMR-LINUX 開發(fā)環(huán)境。四、實(shí)驗(yàn)步驟1、建立工作目錄rootlocalhost root# mkdir hellorootlocalhost root# cd hello2、編寫程序源代碼我們可以是用下面的命令來編寫hello.c的源代碼,進(jìn)入hello目錄使用vi命令來編輯代碼:rootlocalhost hello# vi hello.c按“i”或者“a

3、”進(jìn)入編輯模式,將上面的代碼錄入進(jìn)去,完成后按Esc 鍵進(jìn)入命令狀態(tài),再用命令“:wq!”保存并退出。這樣我們便在當(dāng)前目錄下建立了一個名為hello.c的文件。hello.c源程序:include <stdio.h>int main() char name20;scanf(“%s”,name);printf(“hello %s”,name);return 0;3、編寫Makefile要使上面的hello.c程序能夠運(yùn)行,我們必須要編寫一個Makefile文件,Makefile文件定義了一系列的規(guī)則,它指明了哪些文件需要編譯,哪些文件需要先編譯,哪些文件需要重新編譯等等更為復(fù)雜的命令

4、。使用它帶來的好處就是自動編譯,你只需要敲一個“make”命令整個工程就可以實(shí)現(xiàn)自動編譯。Makefile源程序:CC= armv4l-unknown-linux-gccEXEC = helloOBJS = hello.oCFLAGS +=LDFLAGS+= staticall: $(EXEC)$(EXEC): $(OBJS)$(CC) $(LDFLAGS) -o $ $(OBJS)clean:-rm -f $(EXEC) *.elf *.gdb *.o下面我們來簡單介紹這個Makefile 文件的幾個主要部分:CC 指明編譯器EXEC 表示編譯后生成的執(zhí)行文件名稱OBJS 目標(biāo)文件列表CFL

5、AGS 編譯參數(shù)LDFLAGS 連接參數(shù)all: 編譯主入口clean: 清除編譯結(jié)果注意:“$(CC) $(LDFLAGS) -o $ $(OBJS)”和“-rm -f $(EXEC) *.elf *.gdb *.o”前空白由一個Tab 制表符生成,不能單純由空格來代替。與上面編寫 hello.c的過程類似,用vi來創(chuàng)建一個Makefile文件并將代碼錄入其中。rootlocalhost hello# vi Makefile4、編譯應(yīng)用程序在上面的步驟完成后,我們就可以在hello 目錄下運(yùn)行“make”來編譯我們的程序了。如果進(jìn)行了修改,重新編譯則運(yùn)行:rootlocalhost hell

6、o# make clean/編譯應(yīng)用程序rootlocalhost hello# make/下載調(diào)試注意:編譯、修改程序都是在宿主機(jī)(本地PC 機(jī))上進(jìn)行,不能在超級終端下進(jìn)行。5、下載調(diào)試在宿主PC計(jì)算機(jī)上啟動NFS服務(wù),并設(shè)置好共享的目錄,(這里將剛生成的根目錄/arm2410cl作為共享目錄,以下實(shí)驗(yàn)同理)具體配置請參照前面第一章第四節(jié)中關(guān)于嵌入式Linux 環(huán)境開發(fā)環(huán)境的建立。在建立好NFS共享目錄以后,我們就可以進(jìn)入超級終端中建立開發(fā)板與宿主PC機(jī)之間的通訊了。/mnt/yaffs mount -t nfs -o nolock 6:/arm2410cl /hos

7、t /超級終端中執(zhí)行如果不想使用我們提供的源碼的話,可以再建立一個NFS 共享文件夾。如/root/share,我們把我們自己編譯生成的可執(zhí)行文件復(fù)制到該文件夾下,并通過超級終端掛載到開發(fā)板上。rootlocalhost hello# cp hello /root/share /虛擬機(jī)中/mnt/yaffs mount -t nfs -o nolock 6:/root/share /host /超級終端中再進(jìn)入/host目錄運(yùn)行剛剛編譯好的hello程序,查看運(yùn)行結(jié)果。/mnt/yaffs cd /host /超級終端中/host ./hellohello world(1

8、)在PC計(jì)算機(jī)上啟動NFS 服務(wù),并設(shè)置好共享的目錄。啟動 Red Hat Linux >點(diǎn)擊“主菜單”->選擇“系統(tǒng)設(shè)置”->“服務(wù)器設(shè)置”->“NFS服務(wù)器”->“增加”->“基本”下:點(diǎn)擊“瀏覽”選擇“/”下的“arm2410cl/”;“確定”;“主機(jī):192.168.0.* ”;“基本權(quán)限”選擇“讀/寫”;“確定”。->“常規(guī)選項(xiàng)”下:選擇:“允許來自高于1024的端口的連接”,其他不選;確定。(2)在建立好NFS共享目錄以后,進(jìn)入minicom 中建立開發(fā)板與宿主PC機(jī)之間的通訊新建終端rootlocalhost root# minicom/

9、服務(wù)器新建終端rootlocalhost root#ifconfig eth0 0 /設(shè)置主機(jī)地址rootlocalhost root#ifconfig /查看地址在服務(wù)器下:/mnt/yaffs mount -t nfs o nolock 6:/arm2410cl /var注意:開發(fā)板掛接宿主計(jì)算機(jī)目錄只需要掛接一次便可,只要開發(fā)板沒有重起,就可以一直保持連接。這樣可以反復(fù)修改、編譯、調(diào)試,不需要下載到開發(fā)板。6、實(shí)驗(yàn)截圖7、測試結(jié)果測試掛載成功,用mplayer xyz.avi命令播放視頻rootlocalhost /#cd /mnt/yaffs

10、/mmrootlocalhost /#mplayer xyz.avi五、實(shí)驗(yàn)心得本次實(shí)驗(yàn)比較簡單,旨在讓我們熟悉Linux開發(fā)環(huán)境,學(xué)會基于S3C2410的Linux開發(fā)環(huán)境的配置和使用。實(shí)驗(yàn)中我們創(chuàng)建了一個新目錄,并在其中編寫hello.c和Makefile文件。我們學(xué)習(xí)在Linux下的編程和編譯過程,以及ARM開發(fā)板的使用和開發(fā)環(huán)境的設(shè)置,下載已經(jīng)編譯好的文件到目標(biāo)開發(fā)板上運(yùn)行。學(xué)會使用Linux的armv4l-unknown-linux-gcc編譯和基于NFS方式的下載調(diào)試,了解嵌入式開發(fā)的基本過程。實(shí)驗(yàn)二 S3C2410處理器A/D模塊硬件設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?熟悉硬件電路設(shè)計(jì)2掌握簡單的

11、S3c2410處理器的電路設(shè)計(jì)。3. 掌握protel軟件的使用。 二、實(shí)驗(yàn)內(nèi)容使用protel 99se 做s3c2410處理器最小系統(tǒng)電路設(shè)計(jì),A/D數(shù)據(jù)采集模塊電路設(shè)計(jì)。三、實(shí)驗(yàn)設(shè)備及工具硬件:UP-TECH S2410/P270 DVP 嵌入式實(shí)驗(yàn)平臺、PC 機(jī)Pentium 500 以上, 硬盤10G以上。軟件:PC 機(jī)操作系統(tǒng)REDHAT LINUX 9.0、超級終端(或X-shell)、ARM-LINUX 開發(fā)環(huán)境五、實(shí)驗(yàn)原理1、A/D 轉(zhuǎn)換器A/D 轉(zhuǎn)換器是模擬信號源和CPU 之間聯(lián)系的接口,它的任務(wù)是將連續(xù)變化的模擬信號轉(zhuǎn)換為數(shù)字信號,以便計(jì)算機(jī)和數(shù)字系統(tǒng)進(jìn)行處理、存儲、控制

12、和顯示。在工業(yè)控制和數(shù)據(jù)采集及許多其他領(lǐng)域中,A/D 轉(zhuǎn)換是不可缺少的。A/D 轉(zhuǎn)換器有以下類型:逐位比較型、積分型、計(jì)數(shù)型、并行比較型、電壓頻率型,主要應(yīng)根據(jù)使用場合的具體要求,按照轉(zhuǎn)換速度、精度、價格、功能以及接口條件等因素來決定選擇何種類型。常用的有以下兩種:(1)雙積分型的 A/D 轉(zhuǎn)換器;(2)逐次逼近型的 A/D 轉(zhuǎn)換器。2、A/D 轉(zhuǎn)換的重要指標(biāo)(1)分辨率(Resolution) (2)精度(Accuracy) (3)ARM 自帶的十位A/D 轉(zhuǎn)換器(4)A/D 轉(zhuǎn)換器在擴(kuò)展板的連接(A/D 轉(zhuǎn)換器在擴(kuò)展板的接法如圖2.4.2 所示,前三路通過電位器接到3.3v 電源上。)圖

13、2.4.2 A/D 轉(zhuǎn)換器在擴(kuò)展板上的接法六、實(shí)驗(yàn)步驟1、閱讀理解源碼進(jìn)入/arm2410cl/exp/basic/04_ad 目錄,使用vi 編輯器或其他編輯器閱讀理解源代碼。2、編譯應(yīng)用程序運(yùn)行make產(chǎn)生ad可執(zhí)行文件rootlocalhost /# cd /arm2410cl/exp/basic/04_ad/rootlocalhost 04_ad# makearmv4l-unknown-linux-gcc -c -o main.o main.carmv4l-unknown-linux-gcc -o ./bin/ad main.o -lpthreadarmv4l-unknown-linu

14、x-gcc -o ad main.o -lpthreadrootlocalhost 04_ad# lsad hardware.h main.o Makefile.bak s3c2410-adc.hbin main.c Makefile readme.txt src3、下載調(diào)試到超級終端窗口,使用 NFS mount 開發(fā)主機(jī)的/arm2410cl 到/host 目錄。/mnt/yaffs mount -t nfs -o nolock 6:/arm2410cl /host/mnt/yaffsinsmod ad/s3c2410-adc.o/mnt/yaffscd /host/

15、exp/basic/04_ad/host/exp/basic/04_ad./adPress Enter key exit!a0= 0.0032 a1= 3.2968 a2= 3.2968我們可以通過調(diào)節(jié)開發(fā)板上的三個黃色的電位器,來查看a0、a1、a2 的變化。4、原理圖5、實(shí)驗(yàn)截圖七、實(shí)驗(yàn)心得通過本次試驗(yàn),我學(xué)會了A/D接口原理,了解實(shí)現(xiàn)A/D系統(tǒng)對于硬件要求。閱讀ARM芯片文檔,掌握ARM的A/D相關(guān)寄存器的功能,熟悉ARM系統(tǒng)硬件的A/D相關(guān)接口,還了解在Linux環(huán)境下對S3C2410芯片的8通道10位A/D模塊的硬件設(shè)計(jì)。實(shí)驗(yàn)三 Kernel與root的設(shè)計(jì)和燒寫一、實(shí)驗(yàn)?zāi)康?掌握L

16、inux內(nèi)核配置與裁剪的方法2理解根文件系統(tǒng)配置。3. 掌握嵌入式系統(tǒng)內(nèi)核和根文件系統(tǒng)的燒寫的過程。二、實(shí)驗(yàn)內(nèi)容對嵌入式Linux系統(tǒng)進(jìn)行裁剪、配置和編譯,生成自己需要的操作系統(tǒng)映像文件,并將其燒寫到flash中。三、實(shí)驗(yàn)設(shè)備及工具硬件:UP-NETARM2410-S嵌入式實(shí)驗(yàn)儀、PC機(jī)pentumn500以上、硬盤40G以上、內(nèi)存大于256M。軟件:PC機(jī)操作系統(tǒng)REDHAT LINUX 9.0 、MINICOM 、AMRLINUX開發(fā)環(huán)境.四、實(shí)驗(yàn)步驟1、設(shè)計(jì)過程:2、燒寫過程:(一)、超級終端設(shè)置1、運(yùn)行Windows 系統(tǒng)下開始所有程序附件通訊超級終端(HyperTerminal),新

17、建一個通信終端。如果要求輸入?yún)^(qū)號、電話號碼等信息請隨意輸入,出現(xiàn)如圖1.5.1 所示對話框時,為所建超級終端取名為arm,可以為其選一個圖標(biāo)。單擊“確定”按鈕。2、在接下來的對話框中選擇ARM 開發(fā)平臺實(shí)際連接的PC 機(jī)串口(如COM1),按確定后出現(xiàn)如圖 所示的屬性對話框,設(shè)置通信的格式和協(xié)議。這里波特率為115200,數(shù)據(jù)位8,無奇偶校驗(yàn),停止位1,無數(shù)據(jù)流控制。按確定完成設(shè)置。3、完成新建超級終端的設(shè)置以后,可以選擇超級終端文件菜單中的另存為,把設(shè)置好的超級終端保存在桌面上,以備后用。用串口線將PC 機(jī)串口和平臺UART0 正確連接后,就可以在超級終端上看到程序輸出的信息了。(二)、串口

18、下載燒寫在 Windows xp 平臺下通過超級終端燒寫vivi(bootloader)、內(nèi)核(Kernel)、根文件系統(tǒng)(root)的步驟如下:1、格式化flash打開超級終端,先按住PC 機(jī)鍵盤的Back Space 鍵,然后啟動2410-S,進(jìn)入vivi,按照以下命令格式化flash,重新分區(qū)。vivi>bon part 0 128k 192k 1216k 4288k:m 64704k 回車2、燒寫vivi這時已格式化flash,運(yùn)行的是SDRAM 中的vivi.vivi>load flash vivi x 回車此時超級終端提示:Ready for downloading u

19、sing xmodem.Waiting.點(diǎn)擊超級終端任務(wù)欄上“傳送”下拉菜單中的“發(fā)送文件”,選擇協(xié)議為Xmodem,選擇鏡像文件vivi,點(diǎn)擊“發(fā)送”,10 秒左右vivi 就燒寫到flash 里了.這時要復(fù)位2410S,重新進(jìn)入vivi>來燒寫kernel,root.3、燒寫內(nèi)核映象zImagevivi>load flash kernel x 回車出現(xiàn)提示:Ready for downloading using xmodem.Waiting.點(diǎn)擊超級終端任務(wù)欄上“傳送”下拉菜單中的“發(fā)送文件”,選擇鏡像文件zImage,協(xié)議為Xmodem,點(diǎn)擊“發(fā)送”,4 分鐘左右zImage

20、 傳輸完畢,zImage先傳輸?shù)絊DRAM中,再把數(shù)據(jù)從SDRAM 復(fù)制到flash 里,請等待這一過程結(jié)束到出現(xiàn)vivi>,再燒寫root,否則會導(dǎo)致燒寫kernel 失敗。4、 燒寫根文件系統(tǒng)(root)vivi>load flash root x 回車Ready for downloading using xmodem.Waiting.點(diǎn)擊超級終端任務(wù)欄上“傳送”下拉菜單中的“發(fā)送文件”,選擇鏡像文件root.cramfs,協(xié)議為Xmodem,點(diǎn)擊“發(fā)送”,8 分鐘左右root.cramfs 燒寫完畢;5、燒寫應(yīng)用程序用2410-S 實(shí)驗(yàn)箱配套網(wǎng)線連接好2410-S 的NIC

21、-1 網(wǎng)口和PC 機(jī)的網(wǎng)口,重啟2410-S 進(jìn)入linux 操作系統(tǒng)的/mnt/yaffs下,注意配置IP 在同一網(wǎng)段,執(zhí)行以下指令:/mnt/yaffsifconfig 查看IP/mnt/yaffsifconfig eth0 11 配置eth0 IP/mnt/yaffsinetd 啟動ftp打開ftp 軟件FlashFXP(在光盤中/img/flashvivi 目錄中提供),點(diǎn)擊界面中上部黃色閃電符號,建立快速連接,輸入地址,用戶名:root,密碼:無。連接進(jìn)入ftp服務(wù),上傳“yaffs.tar.bz2”到2410-S 的/var 文件夾下,3 分鐘左右上傳完畢。這

22、時不能重啟2410-S,否則上傳過程白費(fèi)。接下來在超級終端中輸入:/mnt/yaffscd . 轉(zhuǎn)換到/mnt 下/mntrm -rf /yaffs/* 刪除/yaffs 下文件/mntcd /var 轉(zhuǎn)到var 目錄下/vartar xjvf yaffs.tar.bz2 C /mnt/yaffs 解壓yaffs.tar.bz2 到mnt/yaffs 目錄下如圖 所示,注意大小寫(C 為大寫),需5 分鐘左右解壓縮結(jié)束,整個燒寫實(shí)驗(yàn)就完成了。五、實(shí)驗(yàn)心得了解了Linux內(nèi)核與root的知識,能夠利用串口通訊下載方式完成它們的燒寫過程。實(shí)驗(yàn)四 嵌入式軟件設(shè)計(jì)與交叉編譯一、實(shí)驗(yàn)?zāi)康?掌握嵌入式Li

23、nux軟件設(shè)計(jì)方法原理2掌握Makefile文件設(shè)計(jì)方法。3. 熟悉Linux下靜態(tài)庫和共享庫的設(shè)計(jì) 。 二、實(shí)驗(yàn)內(nèi)容(1)編寫一個帶輸入、輸出的由5個文件組成的嵌入式軟件;(2)寫好makefile文件,并上機(jī)調(diào)試;(3)用變量指明兩種編譯器。三、實(shí)驗(yàn)設(shè)備及工具硬件:UP-NETARM2410-S嵌入式實(shí)驗(yàn)儀、PC機(jī)pentumn500以上、硬盤40G以上、內(nèi)存大于256M。軟件:PC機(jī)操作系統(tǒng)REDHAT LINUX 9.0 、MINICOM 、AMRLINUX開發(fā)環(huán)境.四、程序分析input.h:#define N 10void input( char *s);input.c:#incl

24、ude<stdio.h>#include<fcntl.h>Void input(char *s) Printf(“input your name please:”);Scanf(“%s”, s); output.h#define M 5Void output(char *s)output.c#include<stdio.h>#include<fcntl.h>Void output(char *s) Printf(“hello %s!n”, s);main.c#include<stdio.h>#include<fcntl.h>

25、;#include “input.h”#include “output.h”int main( ) int i = 0 ;char nameN;input( name );for( i=0; i<M; i+ )output( name );return 0 ;Makefile:CC=armv4l-unknown-linux-gccEXEC=zcOBJS=main.o input.o output.o$(EXEC):$(OBJS) $(CC) -o $(EXEC) $(OBJS)install: $(EXP_INSTALL) $(EXEC) $(INSTALL_DIR)clean: -rm

26、 -f $(EXEC) &.o五、實(shí)驗(yàn)結(jié)果pc機(jī)上執(zhí)行時 # make /若已執(zhí)行過,則用# make clean 清除后再執(zhí)行# make# ./zc結(jié)果:/mnt/yaffscd /host/exp/basic/zc/host/exp/basic/zc./zcinput your name,please:zchello zc!hello zc!hello zc!hello zc!hello zc!六、實(shí)驗(yàn)心得初步了解了交叉編譯原理,GUN開發(fā)套件包括一系列開發(fā)測試工具,主要組件為Gcc。實(shí)驗(yàn)詳細(xì)說明了基于ARM和Linux的嵌入式系統(tǒng)的交叉編譯環(huán)境的建立方法,并給出了具體的步驟。實(shí)

27、驗(yàn)結(jié)果表明,可以在x86平臺編譯調(diào)試ARM平臺上運(yùn)行的程序。并通過實(shí)驗(yàn)認(rèn)識嵌入式系統(tǒng)上C語言編程與普通PC機(jī)上C語言編程的不同點(diǎn),掌握使用交叉編譯環(huán)境編譯嵌入式系統(tǒng)程序的方法。實(shí)驗(yàn)五 嵌入式驅(qū)動程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?學(xué)習(xí)在LINUX下進(jìn)行驅(qū)動設(shè)計(jì)的原理。2掌握使用模塊方式進(jìn)行驅(qū)動開發(fā)調(diào)試的過程。二、實(shí)驗(yàn)內(nèi)容在PC 機(jī)上編寫簡單的虛擬硬件驅(qū)動程序并進(jìn)調(diào)試,實(shí)驗(yàn)驅(qū)動的各個接口函數(shù)的實(shí)現(xiàn),分析并理解驅(qū)動與應(yīng)用程序的交互過程。三、實(shí)驗(yàn)設(shè)備及工具硬件:UP-NETARM2410-S嵌入式實(shí)驗(yàn)儀、PC機(jī)pentumn500以上、硬盤40G以上、內(nèi)存大于256M。軟件:PC機(jī)操作系統(tǒng)REDHAT LINUX

28、 9.0 、MINICOM 、AMRLINUX開發(fā)環(huán)境 四、實(shí)驗(yàn)步驟1、在PC(宿主機(jī))上編譯調(diào)試驅(qū)動程序。(1)閱讀和理解源代碼進(jìn)入/arm2410cl/exp/drivers/01_demo,使用vi 編輯器或其他編輯器閱讀理解源代碼。(2)編譯驅(qū)動模塊及測試程序上面介紹了在Makefile 中有兩種編譯方法,可以在本機(jī)上使用gcc 也可以使用交叉編 確定 KERNELDIR = /usr/src/linux (3)測試驅(qū)動程序如果使用gcc 編譯的話,需要通過下面的命令來建立設(shè)備節(jié)點(diǎn),如果使用交叉編譯器的話,不需要建立設(shè)備節(jié)點(diǎn)。#mknod /dev/demo c 254 0首先要插入驅(qū)

29、動模塊demo.o,然后可以用lsmod 命令來查看模塊是否已經(jīng)被插入,在不使用該模塊的時候還可以用rmmod 命令來將模塊卸載。 insmod demo.o lsmod demo.o ./test_demo 2、使用arm編譯器在實(shí)驗(yàn)箱調(diào)試驅(qū)動程序。五、實(shí)驗(yàn)結(jié)果分析1 編譯demo.c 為demo.o;編譯test_demo.c 為test_demo。gcc -c demo.c gcc -o test_demo test_demo.c2 若編譯器選擇的是gcc(請查看Makefile文件),需要用以下命令建立節(jié)點(diǎn):#mknod /dev/demo c 254 0 若編譯器選擇的是armv4l

30、-unknown-linux-gcc 則不需要mknod命令建立節(jié)點(diǎn)。3 使用insmod demo.o插入模塊,使用lsmod 列出所有插入的模塊。查看demo的插入情況: #insmod demo.o6. 運(yùn)行test程序測試驅(qū)動的各個接口運(yùn)行情況。# ./test_demo結(jié)果:PC機(jī)上的運(yùn)行結(jié)果: 實(shí)驗(yàn)箱上的運(yùn)行結(jié)果: 7.運(yùn)行ad程序測試驅(qū)動的各個接口運(yùn)行情況六、實(shí)驗(yàn)心得掌握了在Linux下常用編譯器的使用,進(jìn)一步掌握了Makefile的編寫和使用以及Linux下的程序編譯與交叉編譯的過程。實(shí)驗(yàn)六 觸摸屏驅(qū)動程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?、了解在 UP-TECH S2410/P270 DVP

31、 平臺上實(shí)現(xiàn)觸摸屏Linux 驅(qū)動程序的基本原理。2、了解 Linux 驅(qū)動開發(fā)的基本過程。二、實(shí)驗(yàn)內(nèi)容以一個簡單字符設(shè)備驅(qū)動程序?yàn)樵停饰銎浠窘Y(jié)構(gòu)。進(jìn)行部分改寫之后并編譯實(shí)現(xiàn)其相應(yīng)功能。三、預(yù)備知識1、掌握在 Linux 集成開發(fā)環(huán)境中編寫和調(diào)試程序的基本過程。2、了解 ARM 芯片(本實(shí)驗(yàn)是針對ARMS3C2410 系列)的基本結(jié)構(gòu)。3、了解 Linux 內(nèi)核中關(guān)于設(shè)備控制的基本原理。四、實(shí)驗(yàn)設(shè)備及工具硬件:UP-NETARM2410-S嵌入式實(shí)驗(yàn)儀,PC機(jī)pentumn500以上, 硬盤40G以上,內(nèi)存大于128M。軟件:PC 機(jī)操作系統(tǒng)REDHAT LINUX 9.0 超級終端(或

32、X-shell) AMRLINUX 開發(fā)環(huán)境五、實(shí)驗(yàn)原理1、Linux 設(shè)備驅(qū)動概述Linux 設(shè)備驅(qū)動程序?qū)儆贚inux 內(nèi)核的一部分,并在Linux 內(nèi)核中扮演著十分重要的角色。它們像一個個“黑盒子”使某個特定的硬件響應(yīng)一個定義良好的內(nèi)部編程接口,同時完全隱蔽了設(shè)備的工作細(xì)節(jié)。用戶通過一組標(biāo)準(zhǔn)化的調(diào)用來完成相關(guān)操作,這些標(biāo)準(zhǔn)化的調(diào)用是和具體設(shè)備驅(qū)動無關(guān)的,而驅(qū)動程序的任務(wù)就是把這些調(diào)用映射到具體設(shè)備對于實(shí)際硬件的特定操作上。我們可以把設(shè)備驅(qū)動作為內(nèi)核的一部分,直接編譯到內(nèi)核中,即靜態(tài)編譯,也可以單獨(dú)作為一個模塊(module)編譯,在需要它的時候再動態(tài)的把它插入到內(nèi)核中。在不需要時也可把它

33、從內(nèi)核中刪除,即動態(tài)連接。顯然動態(tài)連接比靜態(tài)連接有更多的好處,但在嵌入式開發(fā)領(lǐng)域往往要求進(jìn)行靜態(tài)連接,尤其是像S3C44B0 這種不帶MMU 的芯片。但在S3C2410等帶MMU 的ARM 芯片中我們依然可以使用動態(tài)連接。目前Linux 支持的設(shè)備驅(qū)動可分為三種:字符設(shè)備(character device),塊設(shè)備(blockdevice),網(wǎng)絡(luò)接口設(shè)備(network interface)。當(dāng)然它們之間的也并不是要嚴(yán)格的加以區(qū)分。2、Linux 關(guān)于字符設(shè)備的管理驅(qū)動程序在 Linux 內(nèi)核中往往是以模塊形式出現(xiàn)的。與應(yīng)用程序的執(zhí)行過程不同,模塊通常只是預(yù)先向內(nèi)核注冊自己,當(dāng)內(nèi)核需要時響應(yīng)請

34、求。模塊中包含兩個重要的函數(shù):init_module 和cleanup_module。前者是模塊的入口,它為模塊調(diào)用做好準(zhǔn)備工作,而后者則是在模塊即將卸載時被調(diào)用,做一些清掃工作。驅(qū)動程序模塊通過函數(shù):int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);來完成向內(nèi)核注冊的。其中unsigned int major 為主設(shè)備號,const char *name 為設(shè)備名,至于結(jié)構(gòu)指針struct file_operations *fops 它在驅(qū)動程序中十分重要。在我們編寫

35、好一個驅(qū)動程序模塊后,按傳統(tǒng)的主次設(shè)備號的方法來進(jìn)行設(shè)備管理,則我們應(yīng)手工為該模塊建立一個設(shè)備節(jié)點(diǎn)。命令:mknod /dev/ts c 254 0其中/dev/ts 表示我們的設(shè)備名是ts,“C”說明它是字符設(shè)備,“254”是主設(shè)備號,“0”是次設(shè)備號。一旦通過mknod 創(chuàng)建了設(shè)備文件,它就一直保留下來,除非我們手工刪除它。3、觸摸屏的控制本系統(tǒng)觸摸屏的控制是使用的 S3c2410 處理器自帶的觸摸屏控制器,這部分的開發(fā)主要參考S3c2410 處理器的芯片手冊的第416 頁到第419 頁,具體詳見流程圖。這部分的控制主要是設(shè)置觸摸屏的采樣模式,處理器提供的模式:1正常的轉(zhuǎn)換模式2手動的x/

36、y 位置轉(zhuǎn)換模式3自動的x/y 位置轉(zhuǎn)換模式我們這里使用的是第3 種轉(zhuǎn)換模式。需要注意的是在完成一次x/y 坐標(biāo)采樣的過程中需要一次模式轉(zhuǎn)換即在點(diǎn)擊觸摸屏之前是等待中斷模式,當(dāng)有觸摸動作產(chǎn)生觸摸屏中斷以后,在x/y 的坐標(biāo)采集驅(qū)動中設(shè)置成自動的x/y 位置轉(zhuǎn)換模式,在完成采集以后再轉(zhuǎn)換回等待中斷。ADC控制寄存器ADC觸摸屏控制寄存器注意:在自動模式,ADC觸摸屏控制寄存器要在開始讀之前重新配置ADC開始延遲寄存器ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT1)4觸摸屏相關(guān)電路圖六、實(shí)驗(yàn)步驟1、改寫該驅(qū)動程序,在其基礎(chǔ)上實(shí)現(xiàn)一些你想要的簡單功能。由于驅(qū)動程序的復(fù)雜性,不容易上手且又容易出問題,所以建議你

37、先只對其中的調(diào)試信息做一些改動,在運(yùn)行該驅(qū)動程序時看看其在屏幕上的打印信息。在你對整個過程及相關(guān)硬件有較多的一些了解之后再動手做一些功能上的調(diào)整。2、結(jié)合 ARM-Linux 的移植實(shí)驗(yàn)中的相關(guān)內(nèi)容,把改動的驅(qū)動程序編譯進(jìn)內(nèi)核,并下載內(nèi)核驗(yàn)證結(jié)果。你只要把該驅(qū)動在必要地方修改后(注意修改前的代碼一定要做備份)保存代碼,回到內(nèi)核目錄,make bzImage 編譯內(nèi)核,然后下載編譯好的內(nèi)核。進(jìn)入expbasic04_ad目錄,使用vi編輯main.c:#include <stdio.h>#include <unistd.h>#include <sys/types.h

38、>#include <sys/ipc.h>#include <sys/ioctl.h>#include <pthread.h>#include <fcntl.h>#include "s3c2410-adc.h"#define ADC_DEV "/dev/adc/0raw"static int adc_fd = -1;static int init_ADdevice(void) if(adc_fd=open(ADC_DEV, O_RDWR)<0)printf("Error opening

39、 %s adc devicen", ADC_DEV);return -1; static int GetADresult(int channel) int PRESCALE=0XFF;int data=ADC_WRITE(channel, PRESCALE);write(adc_fd, &data, sizeof(data);read(adc_fd, &data, sizeof(data);return data; static int stop=0;static void* comMonitor(void* data) getchar();stop=1;return NULL; in

溫馨提示

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

評論

0/150

提交評論