《嵌入式系統(tǒng)》實驗報告指導(dǎo)書(含答案)

上傳人:文*** 文檔編號:26041165 上傳時間:2021-08-05 格式:DOCX 頁數(shù):22 大?。?4.55KB
收藏 版權(quán)申訴 舉報 下載
《嵌入式系統(tǒng)》實驗報告指導(dǎo)書(含答案)_第1頁
第1頁 / 共22頁
《嵌入式系統(tǒng)》實驗報告指導(dǎo)書(含答案)_第2頁
第2頁 / 共22頁
《嵌入式系統(tǒng)》實驗報告指導(dǎo)書(含答案)_第3頁
第3頁 / 共22頁

下載文檔到電腦,查找使用更方便

12 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《嵌入式系統(tǒng)》實驗報告指導(dǎo)書(含答案)》由會員分享,可在線閱讀,更多相關(guān)《《嵌入式系統(tǒng)》實驗報告指導(dǎo)書(含答案)(22頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、實驗一 熟悉嵌入式LINUX開發(fā)環(huán)境 1、實驗?zāi)康? 熟悉UP-TECHPXA270-S開發(fā)環(huán)境。學(xué)會 WINDOWS境與嵌入式Linu環(huán)境 共享資源的基本方法。 2、實驗內(nèi)容 學(xué)習(xí)UP-TECHPXA270-S(統(tǒng)的使用、XP和虛擬機之間傳送文件方法以及 UP-TECHPXA270-S虛擬機之間共享目錄的建立方法。 3、預(yù)備知識 了解UP-TECHPXA270-S基本結(jié)構(gòu)和配置,Linux基本知識。 4、實驗設(shè)備 硬件:UP-TECHPXA270-S發(fā)板、PC機(內(nèi)存500M以上)。 軟件:PC機操作系統(tǒng) RADHAND LINUX 9+MIMICOM+RAM LINUX(統(tǒng)

2、 5、實驗步驟 ( 1) 、 在虛擬機下練習(xí) Linux 常用命令。 (注意以下操作只能在 [root@BC root]# , 也就是 root 文件夾下運行,不然會導(dǎo)致系統(tǒng)不能啟動) a. 學(xué)習(xí)命令通過“ man *** ”和“ *** --help ”得到的命令使用方法。 b .學(xué)習(xí)并掌握如下命令: ls , cd , pwd, cat , more, less , mkdir , rmdir , rm, mv, cp, tar , ifconfig (2)、XP與虛擬機之間傳送文件(Samba務(wù)器建立、網(wǎng)絡(luò)設(shè)置、文件傳送); ( 3) 、了解系統(tǒng)資源和連線; (4)、開

3、發(fā)板與虛擬機之間共享目錄建立(設(shè)置 NFS開發(fā)板IP設(shè)置、目錄掛 載) ,掛載文件; ( 5) vi(vim) 的使用 (6)輸入qt,啟動桌面,按CTRL+C1出 6、實驗報告要求 (1)、XP和虛擬機之間傳送文件步驟; 虛擬機共享XP文件: 選擇虛擬機設(shè)置,設(shè)置要共享的文件 啟動 Linux 進(jìn)入 /mnt/hgfs 即可看到共享文件夾 服務(wù)器設(shè)置一一samba服務(wù)器(設(shè)置需要共享的目錄) XP共享虛擬機文件: 服務(wù)器設(shè)置一一samba服務(wù)器(設(shè)置需要共享的目錄) 確保網(wǎng)絡(luò)的PING (即在同一局域網(wǎng)): 1 .虛擬機的 192.168.1.234 (RH9

4、2 .XP 的為 192.168.1.125 3 .在XP下點擊開始-〉〉運行(\\192.168.1.234 ) 4 .用戶名bc密碼123456 以上實現(xiàn)了 Linux虛擬機(RH9)和XP的文件的共享 (2)、開發(fā)板與虛擬機之間建立共享目錄以及文件掛載步驟; 2 .設(shè)置開發(fā)板的ip地址: 3 .在實驗箱終端里 234:/up-techpxa270/exp 4 . /mnt/nfs 即為共享目錄 1.服務(wù)器設(shè)置一一nfs服務(wù)器(設(shè)置需要共享的目錄) ifconfig eth0 192.168.1.5 輸 入 mount -t nfs -o nolock 192.168.

5、1. 串口 (3)、請畫出虛擬機、PC機和AR喊驗箱之間的硬件連接圖; /mnt/nfs (4)、在Linux中怎樣配置網(wǎng)絡(luò); 系統(tǒng)設(shè)置-> 網(wǎng)絡(luò),在新的選項卡中 雙擊 IE 進(jìn)入下圖所示的位置 和配置Linux虛擬機上網(wǎng)的配置相同, 如果需要修改Ip在下圖里修改,然后點 確定,路由和硬件設(shè) 備默認(rèn)的即可. (5)、實驗中遇到的問題與解決過程。 第一個實驗相對簡單些就是熟悉實驗環(huán)境,然后練習(xí)了文件掛載,學(xué)會了開 發(fā)板和虛擬機之間傳送文件的方法。掛載時我覺得難點是容易忽略 IP的配置, 若兩者IP不在同一局域網(wǎng),則掛載不成功。最后是練習(xí) VI編輯器的使用,VI

6、編輯器在上學(xué)期學(xué)過,這次只是重新熟悉下。 實驗二嵌入式LINUX系統(tǒng)的編程 1、實驗?zāi)康? 熟悉UP-TECHPXA270-S Linux的開發(fā)環(huán)境,了解 GNU/mak*具的工作原 理。學(xué)會使用 makefile 管理項目,學(xué)會編寫一個 Makefile 文件。熟悉 arm-linux-gcc 交叉編譯的使用,了解嵌入式開發(fā)的基本過程。 2、實驗內(nèi)容 新建一個目錄, 編寫幾個源文件, 使用 makefile 管理項目。 學(xué)習(xí)在 linux 下 的編程和編譯過程,以及 UP-TECHPXA270-SF發(fā)板開發(fā)環(huán)境的設(shè)置。下載已經(jīng) 編譯好的文件到UP-TECHPXA270-SF發(fā)

7、板中運行。 3、預(yù)備知識 C 語言的基礎(chǔ)知識、程序調(diào)試的基礎(chǔ)知識和方法, LINUX 的基本操作。 4、實驗設(shè)備及工具(包括軟件調(diào)試工具) 硬件:UP-TECHPXA270-跌入式開發(fā)板、PC機Pentumn500以上,硬盤10G 以上。 軟件:PC 機操作系統(tǒng) REDHAT LINUX 9.0 + MINICOM+ ARM-LINUX開發(fā)環(huán) 境 5、實驗步驟 ( 1) 、建立工作目錄 ( 2) 、編寫程序源代碼 ( 3) 、編寫 makefile 文件 ( 4) 、編譯應(yīng)用程序 ( 5) 、下載調(diào)試 ( 6) 、 寫一個簡單的工程, 并輸出自己的姓名和學(xué)號, 利用 M

8、akefile 管理工程, 并寫出 Makefile 文件,進(jìn)行調(diào)試。 6、實驗報告要求 ( 1) 、寫清每步實驗步驟的具體操作內(nèi)容。 1. 建立工作目錄: 先掛載:服務(wù)器設(shè)置—— nfs 服務(wù)器 ( 設(shè)置需要共享的目錄 ) 設(shè)置開發(fā)板的 ip 地址: ifconfig eth0 192.168.1.5 在實驗箱終端里輸入 mount -t nfs -o nolock 192.168.1. 234:/up-techpxa270/exp /mnt/nfs /mnt/nfs 即為共享目錄 在/mnt/nfs 下建立自己的目錄: mkdir cz 2. 編寫程序源代碼 使用 VI

9、編輯器在工作目錄寫入源代碼 3. 編寫 makefile 文件 使用 vi makefile 命令 來編寫 makefile 文件 4. 編譯應(yīng)用程序 使用編譯命令:make - f makefile 來編譯程序 5. 下載調(diào)試 在宿主PC上啟動NFS服務(wù)并設(shè)置共享目錄。就可進(jìn)行兩者通信了。 6. 寫一個簡單的工程,并輸出自己的姓名和學(xué)號,利用 Makefile 管理工程,并 寫出 Makefile 文件,進(jìn)行調(diào)試。 2) 、簡述 Makefile 文件的規(guī)則。 Makefile 文件 Makefile 一個工程中的源文件不計數(shù), 其按類型、 功能、 模 塊分別放在若干

10、個目錄中, makefile 定義了一系列的規(guī)則來指定,哪些文件需 要先編譯, 哪些文件需要后編譯, 哪些文件需要重新編譯, 甚至于進(jìn)行更復(fù)雜的 功能操作,因為 makefile 就像一個 Shell 腳本一樣,其中也可以執(zhí)行操作系統(tǒng) 的命令。 makefile是一個make的規(guī)則描述腳本文件,包括四種類型行:目標(biāo)行、命 令行、宏定義行和make偽指令行(如"include ”)。makefile文件中注釋以“#" 開頭。當(dāng)一行寫不下時,可以用續(xù)行符“ ”轉(zhuǎn)入下一行。 3) 3) 、簡述調(diào)試情況。 先是*.h和* c文件的編寫,最后是makefile文件編寫。寫好make巾le文

11、件amake 后,用命令:make - f amake進(jìn)行編譯,但是一直提示一個錯誤,說是 amake 文件第6行出錯,然后使用vi amake命令進(jìn)行amake文件修改,但還是出錯, 花了半個多小時都沒成功,后來重新編寫amake文件才得以編譯成功。我猜測是 第一次寫amake文件時,加入了不能識別的字符。 實驗三 串行端口程序設(shè)計 1、實驗?zāi)康? 了解在 Linux 環(huán)境下串行程序設(shè)計的基本方法; 掌握終端的主要屬性及設(shè)置方法; 熟悉終端 IO 函數(shù)的使用; 完成串口的收發(fā) 處理。 2、實驗內(nèi)容 讀懂程序源代碼,學(xué)習(xí)終端 IO 函數(shù) tcgetattr(), tcsetattr(

12、),tcflush() 的使用方法,學(xué)習(xí)將多線程編程應(yīng)用到串口的接收和發(fā)送程序設(shè)計中。 3、預(yù)備知識 有 C 語言基礎(chǔ);掌握 Makefile 的編寫和使用;掌握 Linux 下的程序編譯 與交叉編譯過程 4、實驗設(shè)備及工具 硬件:UP-TECHPXA270-獻(xiàn)入式開發(fā)板、PC機Pentumn500以上,硬盤10G以上。 軟件:PC 機操作系統(tǒng) REDHAT LINUX 9.0 + MINICOM+ ARM-LINUX開發(fā)環(huán)境 5、實驗步驟 (1) 、將 E 盤下的 03_tty 復(fù)制到 D:\PXA270\Share 下;將虛擬機的共享打開; (2)、主機A的虛擬機添加用口

13、,主機 A的COM1W實當(dāng)^箱ttyS1相連,實驗箱 ttyS0與另一臺PCtt B相連; (3)、將每臺虛擬機 linux 的/up-techpxa270/exp/basic/03_tty 刪除,將兩臺 主 機 的 D:\PXA270\Share\03_tty 復(fù) 制 到 虛 擬 機 linux 下 的 /up-techpxa270/exp/basic 下; (4) 、進(jìn)入 /up-techpxa270/exp/basic/03_tty 目錄,使用 vi 編輯器或其他編 輯器閱讀理解 serial_rcv 和 serial_send 的源代碼。 (5) 、分別編譯 serial_rc

14、v 和 serial_send 下的源文件生成可執(zhí)行文件。 (6) 、自主選擇作為發(fā)送端或接收端,并修改相應(yīng)的代碼。 (7)、掛載 PC機 B 的/up-techpxa270/exp 到開發(fā)板的 /mnt/nfs 。 (8)、在開發(fā)板和PCM Alinux下運行可執(zhí)行程序,一個發(fā)送數(shù)據(jù),一個接收數(shù) 據(jù)。 (9) 、修改程序,使發(fā)送端發(fā)送一個特定字符給接收端,且發(fā)送端回顯一個字符 或一句話。 6、實驗報告要求 (1) 、寫清每步實驗步驟的具體操作內(nèi)容。 1 .將E盤下的03_tty復(fù)制到D:\PXA270\Share下;將虛擬機的共享打開: 打開虛擬機,選擇 red hat 的設(shè)置

15、,在“選項”的選項卡下打開虛擬機共享 2 .主機A的虛擬機添加用口,主機A的COM行實驗箱ttyS1相連,實驗 箱ttyS0與另一臺PC機B相連; 3 . 將每臺虛擬機 linux 的 /up-techpxa270/exp/basic/03_tty 刪除,分 別將兩臺主機的 D:\PXA270\Share\03_tty 復(fù)制到虛擬機linux 下的 /up-techpxa270/exp/basic 下; 4 .進(jìn)入/up-techpxa270/exp/basic/03_tty 目錄,使用 vi 編輯器或其 他編輯器閱讀理解serial_rcv 和serial_send 的源代碼。 5

16、 .分別編譯serial_rcv 和serial_send下的源文件生成可執(zhí)行文件。 使用make命令在linux平臺編譯 6 .自主選擇作為發(fā)送端或接收端,并修改相應(yīng)的代碼。 7 .掛載 PC機 B 的/up-techpxa270/exp 到開發(fā)板的 /mnt/nfs 。 服務(wù)器設(shè)置一一nfs服務(wù)器(設(shè)置需要共享的目錄),設(shè)置開發(fā)板的ip地址: ifconfig eth0 192.168.1.5 ,在實驗箱終端里輸入 mount -t nfs -o nolock 192.168.1.234:/up-techpxa270/exp /mnt/nfs , /mnt/nfs 即為共享目錄

17、 8 .在開發(fā)板和PC機Alinux下運行可執(zhí)行程序,一個發(fā)送數(shù)據(jù),一個接 收數(shù)據(jù)。 運行程序:./ serial 9 .修改程序,使發(fā)送端發(fā)送一個特定字符給接收端,且發(fā)送端回顯一個 字符或一句話。 while(1) { *serial_buf = getchar(); if(getchar()== ,a){ printf( hello world!\n ");} write(serial_fd, serial_buf, 1); } (2)、232串行通訊的數(shù)據(jù)格式是什么? 0 DO Dt D2 D3 D4 D5 D6 D7 P I 1 I 1 0 DO DI D2 …

18、 起始也 數(shù)據(jù)椀 奇偶檢驗位停止位 空閑位起始位 數(shù)據(jù)位 (3)、串行通訊最少需要幾根線,分別如何連接? 最少需要3a線,分別是RXD(接收數(shù)據(jù))、TXD (發(fā)送數(shù)據(jù))、GND(信號地) AB勺地線相連, A^RXD! B白^TXD B白^RXD!A白^TXD (4)、分析 Makefile 文件。 CROSS=arm-linux- // 交叉編譯 CC=$(CROSS)gcc //GCC 交叉編譯器 CPP=$(CROSS)g++ //G++ 交叉編譯 INSTALL=install BIN=/usr/local/bin WARNINGS = -Os -Wall -

19、Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wpointer-arith -Wcast-qual -Winline -I. CFLAGS= -O2 $(WARNINGS) MATH_LIB=-lm LIBS= $(MATH_LIB) Tpthread // 引用庫文件 OBJ= serial.o main.o TARGET=serial // 目標(biāo)文件 all: $(TARGET) $(OBJ) // 下面一層層開始編譯 # Applications: serial: $(OBJ) $(CC) $(CFLAGS) -

20、o $(TARGET) $(OBJ) $(LIBS) main.o: main.c $(CC) $(CFLAGS) -c -o $@ $< serial.o: serial.c serial.h $(CC) $(CFLAGS) -c -o $@ $< // 清除中間文件 clean: @echo "Cleaning up directory." rm -f *.a *.o $(TARGET) (5) 、簡述調(diào)試情況。 接收端開始不能運行,發(fā)現(xiàn)是 Makefile 錯誤。去掉#CROSS=arm-linux-之前的# 即可編譯。運行時,發(fā)送端輸入一個字符并按下回車鍵,接收端可以

21、顯示出這個字符。 然后是 修改程序,使發(fā)送端發(fā)送一個特定字符給接收端,且發(fā)送端回顯一個字符 或一句話。 發(fā)送端可以回顯, 但是接收端會多出一個字符, 我猜測是由于緩沖區(qū) 沒有清除的原因。 實驗四 多線程應(yīng)用程序設(shè)計 1、實驗?zāi)康? 了解多線程程序設(shè)計的基本原理,學(xué)習(xí) pthread 庫函數(shù)的使用。 2、實驗內(nèi)容 讀,懂pthread.c的源代碼,熟悉幾個重要的PTHREAD函數(shù)的使用。掌握共享 鎖和信號量的使用方法。 3、預(yù)備知識 熟練使用 C 語言,掌握在 Linux 下常用編輯器的使用,掌握 Makefile 的編 寫和使用,掌握 Linux 下的程序編譯與交叉編譯過程

22、。 4、實驗設(shè)備及工具 硬件:UP-TECHPXA270-獻(xiàn)入式實驗儀,PC機pentumn500以上,硬盤10G以上 軟件:PC 機操作系統(tǒng) REDHAT LINUX 9.0 + MINICOM+ AMRLINUX開發(fā)環(huán)境 5、實驗步驟 ( 1)進(jìn)入 exp/basic/02_pthread 目錄,使用 vi 編輯器或其他編輯器閱讀理解源 代碼; (2)運行make^生pthread可執(zhí)行文件; (3)切換到 minicom終端窗口,使用 NFSmountFF發(fā)主機的/up-techpxa270 至U/mnt 目錄; ( 4)進(jìn)入 /mnt/exp/basic/02_pthr

23、ead 目錄,運行 ./pthread ,觀察運行結(jié)果的 正確性,若顯示結(jié)果太快,可以用以下命令輸出顯示結(jié)果到 pthread.txt 文 件./pthread >pthread.txt ,然后再用cat pthread.txt 查看文件內(nèi)容,結(jié)合程 序分析結(jié)果; ( 5)加入一個新的線程用于處理鍵盤輸入,并在按特定字符時終止所有線程。 6、實驗報告要求 ( 1)寫清每步實驗步驟及具體操作內(nèi)容; 1. 進(jìn)入 exp/basic/02_pthread 目錄, 使用 VI 命令即可打開源代碼進(jìn)行閱讀 2. 運行make產(chǎn)生pthread可執(zhí)行文件 3. 掛載:服務(wù)器設(shè)置—— nfs

24、 服務(wù)器 ( 設(shè)置需要共享的目錄 ) ,設(shè)置開發(fā)板的 ip 地址: ifconfig eth0 192.168.1.5 ,在實驗箱終端里輸入 mount -t nfs -o nolock 192.168.1. 234:/up-techpxa270/exp /mnt/nfs , /mnt/nfs 即為共享 目錄 4. 進(jìn)入 /mnt/exp/basic/02_pthread 目錄,運行 ./pthread ,觀察運行結(jié)果 的正確性,若顯示結(jié)果太快,可以用以下命令輸出顯示結(jié)果到 pthread.txt 文 件 ./pthread >pthread.txt ,然后再用 cat pthrea

25、d.txt 查看文件內(nèi)容,結(jié)合程 序分析結(jié)果; 最后的結(jié)果: put-->998 put-->999 producer stopped! 993-->get 994-->get 995-->get 996-->get 997-->get 998-->get 999-->get consumer stopped! 5. 加入一個新的線程用于處理鍵盤輸入,并在按特定字符時終止所有線程。 void listener(void *data) { if(getch()= ’ q ’ ){ pthread_cancel(id1); pthread_cancel(id2

26、);} pthread_exit(0); } ( 2)寫出程序 pthread.c 的分析; #include #include #include #include "pthread.h" #define BUFFER_SIZE 16 /* 設(shè)置一個整數(shù)的圓形緩沖區(qū) */ struct prodcons { int buffer[BUFFER_SIZE]; /* 緩沖區(qū)數(shù)組 */ pthread_mutex_t lock; /* 互斥鎖 */ int readpos, writepos; /* 讀寫的位置 */

27、緩沖區(qū)非空信號 pthread_cond_t notfull; /* */ pthread_cond_t notempty; /* 緩沖區(qū)非滿信號 */ }; /* /* 初始化緩沖區(qū) */ void init(struct prodcons * b) { pthread_mutex_init(&b->lock, NULL); /* 初始化后處于解鎖狀態(tài) */ pthread_cond_init(&b->notempty, NULL); /* 指針為空時默認(rèn)狀態(tài) */ pthread_cond_init(&b->notfull, NULL); b->readpos = 0

28、; b->writepos = 0; } /* */ /* 向緩沖區(qū)中寫入一個整數(shù) */ void put(struct prodcons * b, int data) { pthread_mutex_lock(&b->lock); /* 等待緩沖區(qū)非滿 */ while ((b->writepos + 1) % BUFFER_SIZE == b->printf("wait for not full\n"); pthread_cond_wait(&b->notfull, &b->lock); } /* 寫數(shù)據(jù)并且指針前移 */ b->buffer[b->write

29、pos] = data; b->writepos++; if (b->writepos >= BUFFER_SIZE) b->writepos = /* 設(shè)置緩沖區(qū)非空信號 */ pthread_cond_signal(&b->notempty); pthread_mutex_unlock(&b->lock); } /* */ /* 從緩沖區(qū)中讀出一個整數(shù) */ int get(struct prodcons * b) { int data; pthread_mutex_lock(&b->lock); /* 等待緩沖區(qū)非空 */ while (b->writep

30、os == b->readpos) { printf("wait for not empty\n"); pthread_cond_wait(&b->notempty, &b->lock); } /* 讀數(shù)據(jù)并且指針前移 */ data = b->buffer[b->readpos]; b->readpos++; if (b->readpos >= BUFFER_SIZE) b->readpos = 0; /* 設(shè)置緩沖區(qū)非滿信號 */ pthread_cond_signal(&b->notfull); pthread_mutex_unlock(&b->lock); retu

31、rn data; } /* #define OVER (-1) struct prodcons buffer; /* void * producer(void * data) /* */ */ 生產(chǎn)者進(jìn)程函數(shù) */ { int n; for (n = 0; n < 1000; n++) { printf(" put-->%

32、d\n", n); put(&buffer, n); } put(&buffer, OVER); printf("producer stopped!\n"); return NULL; } */ 消費者進(jìn)程函數(shù) */ */ /* void * consumer(void * data) /* { int d; while (1) { d = get(&buffer); if (d == OVER ) break; printf(" %d-->get\n", d); } printf("consumer stopped!\n"); return NULL;

33、 } /* int main(void) { pthread_t th_a, th_b; void * retval; /* 存儲被等待線程的返回值 */ init(&buffer); pthread_create(&th_a, NULL, producer, 0); pthread_create(&th_b, NULL, consumer, 0); /* 等待生產(chǎn)者和消費者結(jié)束 */ pthread_join(th_a, &retval); pthread_join(th_b, &retval); return 0; } (3) 寫出修改后的代碼并加以說明; v

34、oid listener(void *data) { if(getch()= ’ q ’ ){ pthread_cancel(id1); pthread_cancel(id2);} pthread_exit(0); 在 main 函數(shù)中: int main(void) { pthread_t th_a, th_b , th_a; void * retval; init(&buffer); pthread_create(&th_a, NULL, producer, 0); pthread_create(&th_b, NULL, consumer, 0); pthread_

35、create(&th_c, NULL, listener, 0); /* 等待生產(chǎn)者和消費者結(jié)束 */ pthread_join(th_a, &retval); pthread_join(th_b, &retval); pthread_join(th_c, &retval); return 0; } ( 4)實驗中遇到的問題與解決過程? 實驗時先是看懂代碼,其中有很多函數(shù)都沒見過,更沒用過,先是網(wǎng)上查資料, 看 API 文檔,逐一的看懂函數(shù)。然后是整體思路的理解,消費者怎么工作,生產(chǎn) 者怎么工作, 他們是怎么互斥的。 然后是改正代碼實現(xiàn): 加入一個新的線程用于 處理鍵盤輸

36、入,并在按“ q ”時終止所有線程。開始為了接收按鍵用了 但是 linux 下沒有這個庫函數(shù), 問了其他同學(xué), 才發(fā)現(xiàn)自己將問題想復(fù)雜了, 直 接用 getch() 即可,然后經(jīng)過調(diào)試就完成了實驗任務(wù)。 實驗五 內(nèi)核驅(qū)動設(shè)計入門 -模塊方式驅(qū)動實驗 1、實驗?zāi)康? 學(xué)習(xí)在 LINUX 下進(jìn)行驅(qū)動設(shè)計的原理;掌握使用模塊方式進(jìn)行驅(qū)動開發(fā)調(diào)試 的過程。 2、實驗內(nèi)容 在PC機上編寫簡單的虛擬硬件驅(qū)動程序并進(jìn)行調(diào)試, 實驗驅(qū)動的各個接口函 數(shù)的實現(xiàn) , 分析并理解驅(qū)動與應(yīng)用程序的交互過程。 3、預(yù)備知識 有 C 語言基礎(chǔ); 掌握 Makefile 的編寫和使

37、用; 掌握 Linux 下的程序編譯與交叉編譯過程。 有驅(qū)動開發(fā)的基本知識。 4、實驗設(shè)備及工具 硬件:PC機pentumn500以上,硬盤40G以上,內(nèi)存大于128M 軟件:PC 機操作系統(tǒng) REDHAT LINUX 9.0 + MINICOM+ AMRLINUX開發(fā)環(huán)境 5、實驗步驟 (1) 認(rèn)真閱讀實驗原理,理解驅(qū)動的體系結(jié)構(gòu) (2) 熟悉程序源代碼及 Makefile (/up-techpxa270/exp/drivers/01_moddriver) (3) 編譯程序 (4) 程序掛載 (5) 驅(qū)動調(diào)試 插入模塊 insmod hello.ko (6) 刪除模

38、塊 rmmod hello.ko (7) 分析 demo.c 我們可以直接使用 cat /dev/demo 調(diào)用驅(qū)動的 read 函數(shù),測試讀過程。 6、實驗報告要求 ( 1) 、寫清每步實驗步驟的具體操作內(nèi)容。 1. 認(rèn)真閱讀實驗原理,理解驅(qū)動的體系結(jié)構(gòu) 2. 進(jìn)入 /up-techpxa270/exp/drivers/01_moddriver 目錄,使用 vi 命令打開源代 碼和 Makefile 3. 使用mak吩令編譯程序 4. 程序掛載: 服務(wù)器設(shè)置—— nfs 服務(wù)器 ( 設(shè)置需要共享的目錄 ) ,設(shè)置開發(fā)板的 ip 地址: ifconfig eth0 192.

39、168.1.5 ,在實驗箱終端里輸入 mount -t nfs -o nolock 192.168.1. 234:/up-techpxa270/exp /mnt/nfs , /mnt/nfs 即為共享目錄 5. 插入模塊:命令 insmod hello.ko 6. 刪除模塊:命令 rmmod hello.ko 7. 分析demo.c:使用vi打開demo.c文件,并對照實驗指導(dǎo)書分析各個函數(shù)的功能 ( 2) 、模塊與應(yīng)用程序的區(qū)別? 1. 應(yīng)用程序是從頭到尾執(zhí)行單個任務(wù) ; 模塊卻只是預(yù)先注冊自己以便服務(wù)于將來 的某個請求,其中,函數(shù) init_module( 模塊的入口 ) 的任

40、務(wù)是為以后調(diào)用模塊函 數(shù)預(yù)先做準(zhǔn)備,函數(shù) cleanup_module( 模塊的第二入口 ) 是在模塊卸載時調(diào)用。 2. 應(yīng)用程序可以調(diào)用它未定義的函數(shù), 因為在連接過程能夠解析外部引用從而使 用適當(dāng)?shù)暮瘮?shù)庫 ; 模塊僅僅被連接到內(nèi)核, 因此它僅能調(diào)用有內(nèi)核導(dǎo)出的函數(shù) ( 如 printk) ,而沒有任何可連接的庫。 3. 應(yīng)用程序開發(fā)過程中的段錯誤是無害的, 并且總是可以使用調(diào)試器跟蹤到源代 碼中的問題所在 ; 內(nèi)核模塊的一個錯誤即使不對整個系統(tǒng)是致命的,也至少會對 當(dāng)前進(jìn)程造成致命錯誤。 4. 應(yīng)用程序運行于用戶空間, 處理器禁止其對硬件的直接訪問以及對內(nèi)存的未授 權(quán)訪問

41、 ; 內(nèi)核模塊運行于內(nèi)核空間,可以進(jìn)行所有操作。 5. 應(yīng)用程序一般不必?fù)?dān)心發(fā)生其他情況而改變它的運行環(huán)境 ; 內(nèi)核模塊編程則必 須考慮并發(fā)問題的處理。 ( 3) 、編譯、調(diào)試情況。 編譯后,插入模塊: insmod hello.ko ,可在開發(fā)板上顯示 hello world ! 刪除模塊: rmmod hello.ko ,刪除模版時也會顯示一句話。 實驗六 Qt/E 應(yīng)用程序設(shè)計 1、實驗?zāi)康? 1. 了解在Linux下安裝Qt以及Qt/Embedded的基本步驟; 2. 學(xué)會在嵌入式設(shè)備上 Qt/E 平臺下使用 Virtual framebuffer 顯示程序結(jié) 果; 2

42、、實驗內(nèi)容 1. 在 Linux 下編譯和使用 Qt/E 平臺; 2. 在 Qt/E 平臺下編譯和運行一個程序使用 Virtual framebuffer 顯示運行 結(jié)果;并且運行結(jié)果可以在實驗箱上顯示。 3、預(yù)備知識 1. 熟悉使用C+郵言程序設(shè)計; 2. 掌握 Linux 下常用編輯器的使用; 3. 掌握 Linux 下程序編譯; 4. 熟悉 Qt 程序設(shè)計; 4、實驗室設(shè)備和工具 硬件:PC機Pentumn500以上,硬盤10G以上。 軟件:PC機操作系統(tǒng) REDHAT LINUX 9.0 + MINICOM+ ARM-LINUX開發(fā)環(huán) 境 5、實驗步驟 ( 1)

43、解壓安裝包并設(shè)置環(huán)境變量 ( 2)編譯 Qt/Embedded ( 3)查看運行結(jié)果 ( 4)在開發(fā)板上看運行結(jié)果 6、實驗報告要求 ( 1) 、寫出具體實驗流程及操作內(nèi)容 1. 解壓安裝包并設(shè)置環(huán)境變量 安裝 Tmake cd ~/pxa270Qt tar — xzf tmake-1.13.tar.gz export TMAKEDIR=$PWD/tmake-1.13 安裝 Qt 2.3.2 cd ~/pxa270Qt tar - xzf qt-x11-2.3.2.tar.gz export QT2DIR=$PWD/qt-2.3.2 安裝 Qt/Embedded

44、 cd ~/pxa270Qt tar - xzf qt-embedded-2.3.10-free.tar.export QTEDIR=$PWD/qt-2.3.10 2. 編譯 Qt/Embedded Build Qt2.3.2 cd $QT2DIR export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-xft make

45、 mkdir $QTEDIR/bin cp bin/uic $QTEDIR/bin/ Build Qvfb export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH:$TMAKEDIR/bin export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH cd $QTEDIR/tools/qvfb tmake -o Makefile qvfb.pro make mv qvfb $QTEDIR/bin/ Build Q

46、t/Embedded cd $QTEDIR export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++ export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-xft -qvfb -depths 4,8,16,32 make 3. 查看運行結(jié)果 在 Virtual framebuffer 上運行: export QTDIR=$QTEDIR export PATH=

47、$QTEDIR/bin:$PATH export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH cd $QTEDIR/examples/launcher qvfb -width 640 -height 480 & sleep 10 ./launcher - qws 4. 在開發(fā)板上看運行結(jié)果 ( 2) 、簡述調(diào)試情況 按著實驗指導(dǎo)書一步步來,若操作錯誤則從頭開始。 在 /root/pxa270Qt/qt-2.3.10/examples 下 建 立 一 個 新 目 錄 , 在 其 下 編 輯 hello.cpp 源文件,注意將源程序中 argv 后面” [] ”去掉。 生成工程文件 (.pro) 。 生成 Makefile 文件。 輸入make,生成可執(zhí)行文件hello。 輸入./hello - qws在 Virtual framebuffer 上顯示效果。 ( 3) 、實驗中遇到的問題與解決過程。 解壓安裝包并設(shè)置環(huán)境變量、編譯Qt/Embedded勺過程中錯一個地方就不會 有結(jié)果,所以這兩個步驟要特別仔細(xì)認(rèn)真。在 Linux 編譯的過程中,不要去停止 它,強行停止會發(fā)生錯誤。運行時,系統(tǒng)提示不支持 32位顏色,可以在設(shè)置中更 改。

展開閱讀全文
溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!