《嵌入式系統(tǒng)》實(shí)驗(yàn)報(bào)告指導(dǎo)書(shū)_第1頁(yè)
《嵌入式系統(tǒng)》實(shí)驗(yàn)報(bào)告指導(dǎo)書(shū)_第2頁(yè)
《嵌入式系統(tǒng)》實(shí)驗(yàn)報(bào)告指導(dǎo)書(shū)_第3頁(yè)
《嵌入式系統(tǒng)》實(shí)驗(yàn)報(bào)告指導(dǎo)書(shū)_第4頁(yè)
《嵌入式系統(tǒng)》實(shí)驗(yàn)報(bào)告指導(dǎo)書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《嵌入式系統(tǒng)》實(shí)驗(yàn)報(bào)告指導(dǎo)書(shū).試驗(yàn)一熟識(shí)嵌入式LINUX開(kāi)發(fā)環(huán)境

1、試驗(yàn)?zāi)康?/p>

熟識(shí)UP-TECHPXA270-S的開(kāi)發(fā)環(huán)境。學(xué)會(huì)WINDOWS環(huán)境與嵌入式Linu環(huán)境共享資源的基本方法。

2、試驗(yàn)內(nèi)容

學(xué)習(xí)UP-TECHPXA270-S系統(tǒng)的使用、XP和虛擬機(jī)之間傳送文件方法以及UP-TECHPXA270-S和虛擬機(jī)之間共享名目的建立方法。

3、預(yù)備學(xué)問(wèn)

了解UP-TECHPXA270-S的基本結(jié)構(gòu)和配置,Linux基本學(xué)問(wèn)。

4、試驗(yàn)設(shè)備

硬件:UP-TECHPXA270-S開(kāi)發(fā)板、PC機(jī)(內(nèi)存500M以上)。

軟件:PC機(jī)操作系統(tǒng)RADHANDLINUX9+MIMI+RAMLINUX操作系統(tǒng)

5、試驗(yàn)步驟

(1)、在虛擬機(jī)下練習(xí)Linux常用命令。(留意以下操作只能在#,也就是root文件夾下運(yùn)行,不然會(huì)導(dǎo)致系統(tǒng)不能啟動(dòng))

a.學(xué)習(xí)命令通過(guò)“man***”和“***--help”得到的命令使用方法。

b.學(xué)習(xí)并把握如下命令:

ls,cd,pwd,cat,more,less,mkdir,rmdir,rm,mv,cp,tar,ifconfig

(2)、XP與虛擬機(jī)之間傳送文件(Samba服務(wù)器建立、網(wǎng)絡(luò)設(shè)置、文件傳送);(3)、了解系統(tǒng)資源和連線;

(4)、開(kāi)發(fā)板與虛擬機(jī)之間共享名目建立(設(shè)置NFS、開(kāi)發(fā)板IP設(shè)置、名目掛載),掛載文件;

(5)vi(vim)的使用

(6)輸入qt,啟動(dòng)桌面,按CTRL+C退出

6、試驗(yàn)報(bào)告要求

(1)、XP和虛擬機(jī)之間傳送文件步驟;

虛擬機(jī)共享XP文件:

選擇虛擬機(jī)設(shè)置,設(shè)置要共享的文件

啟動(dòng)Linux

進(jìn)入/mnt/hgfs即可看到共享文件夾

服務(wù)器設(shè)置——samba服務(wù)器(設(shè)置需要共享的名目)

XP共享虛擬機(jī)文件:

服務(wù)器設(shè)置——samba服務(wù)器(設(shè)置需要共享的名目)

確保網(wǎng)絡(luò)的PING通(即在同一局域網(wǎng)):

1.虛擬機(jī)的19

34(RH9)

2.XP的為25

3.在XP下點(diǎn)擊開(kāi)頭-》運(yùn)行(\\34)

4.用戶名bc密碼123456

以上實(shí)現(xiàn)了Linux虛擬機(jī)(RH9)和XP的文件的共享

(2)、開(kāi)發(fā)板與虛擬機(jī)之間建立共享名目以及文件掛載步驟;

1.服務(wù)器設(shè)置——nfs服務(wù)器(設(shè)置需要共享的名目)

2.設(shè)置開(kāi)發(fā)板的ip地址:ifconfigeth0

3.在試驗(yàn)箱終端里輸入mount-tnfs-onolock192.168.1.

234:/up-techpxa270/exp/mnt/nfs

4./mnt/nfs即為共享名目

(3)、請(qǐng)畫(huà)出虛擬機(jī)、PC機(jī)和ARM試驗(yàn)箱之間的硬件連接圖;

(4)、在Linux中怎樣配置網(wǎng)絡(luò);

系統(tǒng)設(shè)置->網(wǎng)絡(luò),在新的選項(xiàng)卡中

(5)、試驗(yàn)中遇到的問(wèn)題與解決過(guò)程。

第一個(gè)試驗(yàn)相對(duì)簡(jiǎn)潔些就是熟識(shí)試驗(yàn)環(huán)境,然后練習(xí)了文件掛載,學(xué)會(huì)了開(kāi)發(fā)板和虛擬機(jī)之間傳送文件的方法。掛載時(shí)我覺(jué)得難點(diǎn)是簡(jiǎn)單忽視IP的配置,若兩者IP不在同一局域網(wǎng),則掛載不勝利。最終是練習(xí)VI編輯器的使用,VI編輯器在上學(xué)期學(xué)過(guò),這次只是重新熟識(shí)下。

試驗(yàn)二嵌入式LINUX系統(tǒng)的編程

1、試驗(yàn)?zāi)康?/p>

熟識(shí)UP-TECHPXA270-S下Linux的開(kāi)發(fā)環(huán)境,了解GNU/make工具的工作原理。學(xué)會(huì)使用makefile管理項(xiàng)目,學(xué)會(huì)編寫(xiě)一個(gè)Makefile文件。熟識(shí)arm-linux-gcc交叉編譯的使用,了解嵌入式開(kāi)發(fā)的基本過(guò)程。

2、試驗(yàn)內(nèi)容

新建一個(gè)名目,編寫(xiě)幾個(gè)源文件,使用makefile管理項(xiàng)目。學(xué)習(xí)在linux下的編程和編譯過(guò)程,以及UP-TECHPXA270-S開(kāi)發(fā)板開(kāi)發(fā)環(huán)境的設(shè)置。下載已經(jīng)編譯好的文件到UP-TECHPXA270-S開(kāi)發(fā)板中運(yùn)行。

3、預(yù)備學(xué)問(wèn)

C語(yǔ)言的基礎(chǔ)學(xué)問(wèn)、程序調(diào)試的基礎(chǔ)學(xué)問(wèn)和方法,LINUX的基本操作。

4、試驗(yàn)設(shè)備及工具(包括軟件調(diào)試工具)

硬件:UP-TECHPXA270-S嵌入式開(kāi)發(fā)板、PC機(jī)Pentumn500以上,硬盤(pán)10G以上。

軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+MINI+ARM-LINUX開(kāi)發(fā)環(huán)境

5、試驗(yàn)步驟

(1)、建立工作名目

(2)、編寫(xiě)程序源代碼

(3)、編寫(xiě)makefile文件

(4)、編譯應(yīng)用程序

(5)、下載調(diào)試

(6)、寫(xiě)一個(gè)簡(jiǎn)潔的工程,并輸出自己的姓名和學(xué)號(hào),利用Makefile管理工程,并寫(xiě)出Makefile文件,進(jìn)行調(diào)試。

6、試驗(yàn)報(bào)告要求

(1)、寫(xiě)清每步試驗(yàn)步驟的詳細(xì)操作內(nèi)容。

1.建立工作名目:

先掛載:服務(wù)器設(shè)置——nfs服務(wù)器(設(shè)置需要共享的名目)

設(shè)置開(kāi)發(fā)板的ip地址:ifconfigeth0

在試驗(yàn)箱終端里輸入

mount-tnfs-onolock192.168.1.234:/up-techpxa270/exp/mnt/nfs/mnt/nfs即為共享名目

在/mnt/nfs下建立自己的名目:mkdircz

2.編寫(xiě)程序源代碼

使用VI編輯器在工作名目寫(xiě)入源代碼

3.編寫(xiě)makefile文件

使用vimakefile命令來(lái)編寫(xiě)makefile文件

4.編譯應(yīng)用程序

使用編譯命令:make–fmakefile來(lái)編譯程序

5.下載調(diào)試

在宿主PC上啟動(dòng)NFS服務(wù)并設(shè)置共享名目。就可進(jìn)行兩者通信了。

6.寫(xiě)一個(gè)簡(jiǎn)潔的工程,并輸出自己的姓名和學(xué)號(hào),利用Makefile管理工程,并寫(xiě)出Makefile文件,進(jìn)行調(diào)試。

(2)、簡(jiǎn)述Makefile文件的規(guī)章。

Makefile文件Makefile一個(gè)工程中的源文件不計(jì)數(shù),其按類型、功能、模塊分別放在若干個(gè)名目中,makefile定義了一系列的規(guī)章來(lái)指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更簡(jiǎn)單的功能操作,由于makefile就像一個(gè)Shell腳本一樣,其中也可以執(zhí)行操作系統(tǒng)的命令。

makefile是一個(gè)make的規(guī)章描述腳本文件,包括四種類型行:目標(biāo)行、命令行、宏定義行和make偽指令行(如“include”)。makefile文件中解釋以“#”開(kāi)頭。當(dāng)一行寫(xiě)不下時(shí),可以用續(xù)行符“\”轉(zhuǎn)入下一行。

(3)、簡(jiǎn)述調(diào)試狀況。

先是*.h和*.c文件的編寫(xiě),最終是makefile文件編寫(xiě)。寫(xiě)好makefile文件amake后,用命令:make–famake進(jìn)行編譯,但是始終提示一個(gè)錯(cuò)誤,說(shuō)是amake文件第6行出錯(cuò),然后使用viamake命令進(jìn)行amake文件修改,但還是出錯(cuò),花了半個(gè)多小時(shí)都沒(méi)勝利,后來(lái)重新編寫(xiě)amake文件才得以編譯勝利。我猜想是第一次寫(xiě)amake文件時(shí),加入了不能識(shí)別的字符。

試驗(yàn)三串行端口程序設(shè)計(jì)

1、試驗(yàn)?zāi)康?/p>

了解在Linux環(huán)境下串行程序設(shè)計(jì)的基本方法;

把握終端的主要屬性及設(shè)置方法;熟識(shí)終端IO函數(shù)的使用;完成串口的收發(fā)處理。

2、試驗(yàn)內(nèi)容

讀懂程序源代碼,學(xué)習(xí)終端IO函數(shù)tcgetattr(),tcsetattr(),tcflush()的使用方法,學(xué)習(xí)將多線程編程應(yīng)用到串口的接收和發(fā)送程序設(shè)計(jì)中。

3、預(yù)備學(xué)問(wèn)

有C語(yǔ)言基礎(chǔ);把握Makefile的編寫(xiě)和使用;把握Linux下的程序編譯與交叉編譯過(guò)程

4、試驗(yàn)設(shè)備及工具

硬件:UP-TECHPXA270-S嵌入式開(kāi)發(fā)板、PC機(jī)Pentumn500以上,硬盤(pán)10G以上。軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+MINI+ARM-LINUX開(kāi)發(fā)環(huán)境

5、試驗(yàn)步驟

(1)、將E盤(pán)下的03_tty復(fù)制到D:\PXA270\Share下;將虛擬機(jī)的共享打開(kāi);

(2)、主機(jī)A的虛擬機(jī)添加串口,主機(jī)A的1與試驗(yàn)箱ttyS1相連,試驗(yàn)箱ttyS0與另一臺(tái)PC機(jī)B相連;

(3)、將每臺(tái)虛擬機(jī)linux的/up-techpxa270/exp/basic/03_tty刪除,將兩臺(tái)主機(jī)的D:\PXA270\Share\03_tty復(fù)制到虛擬機(jī)linux下的/up-techpxa270/exp/basic下;

(4)、進(jìn)入/up-techpxa270/exp/basic/03_tty名目,使用vi編輯器或其他編輯器閱讀理解serial_rcv和serial_send的源代碼。

(5)、分別編譯serial_rcv和serial_send下的源文件生成可執(zhí)行文件。

(6)、自主選擇作為發(fā)送端或接收端,并修改相應(yīng)的代碼。

(7)、掛載PC機(jī)B的/up-techpxa270/exp到開(kāi)發(fā)板的/mnt/nfs。

(8)、在開(kāi)發(fā)板和PC機(jī)Alinux下運(yùn)行可執(zhí)行程序,一個(gè)發(fā)送數(shù)據(jù),一個(gè)接收數(shù)據(jù)。

(9)、修改程序,使發(fā)送端發(fā)送一個(gè)特定字符給接收端,且發(fā)送端回顯一個(gè)字符或一句話。

6、試驗(yàn)報(bào)告要求

(1)、寫(xiě)清每步試驗(yàn)步驟的詳細(xì)操作內(nèi)容。

1.將E盤(pán)下的03_tty復(fù)制到D:\PXA270\Share下;將虛擬機(jī)的共享打開(kāi):打開(kāi)虛擬機(jī),選擇redhat的設(shè)置,在“選項(xiàng)”的選項(xiàng)卡下打開(kāi)虛擬機(jī)共享

2.主機(jī)A的虛擬機(jī)添加串口,主機(jī)A的1與試驗(yàn)箱ttyS1相連,試驗(yàn)箱ttyS0與另一臺(tái)PC機(jī)B相連;

3.將每臺(tái)虛擬機(jī)linux的/up-techpxa270/exp/basic/03_tty刪除,分

別將兩臺(tái)主機(jī)的D:\PXA270\Share\03_tty復(fù)制到虛擬機(jī)linux下的/up-techpxa270/exp/basic下;

4.進(jìn)入/up-techpxa270/exp/basic/03_tty名目,使用vi編輯器或其他編輯器閱讀理解serial_rcv和serial_send的源代碼。

5.分別編譯serial_rcv和serial_send下的源文件生成可執(zhí)行文件。使用make命令在linux平臺(tái)編譯

6.自主選擇作為發(fā)送端或接收端,并修改相應(yīng)的代碼。

7.掛載PC機(jī)B的/up-techpxa270/exp到開(kāi)發(fā)板的/mnt/nfs。

服務(wù)器設(shè)置——nfs服務(wù)器(設(shè)置需要共享的名目),設(shè)置開(kāi)發(fā)板的ip地址:ifconfigeth0,在試驗(yàn)箱終端里輸入mount-tnfs-onolock192.168.1.234:/up-techpxa270/exp/mnt/nfs,/mnt/nfs即為共享名目

8.在開(kāi)發(fā)板和PC機(jī)Alinux下運(yùn)行可執(zhí)行程序,一個(gè)發(fā)送數(shù)據(jù),一個(gè)接收數(shù)據(jù)。

運(yùn)行程序:./serial

9.修改程序,使發(fā)送端發(fā)送一個(gè)特定字符給接收端,且發(fā)送端回顯一個(gè)字符或一句話。

while(1)

{

*serial_buf=getchar();

if(getchar()==’a’){

printf(“helloworld!\n”);}

write(serial_fd,serial_buf,1);

}

(2)、232串行通訊的數(shù)據(jù)格式是什么?

(3)、串行通訊最少需要幾根線,分別如何連接?

最少需要3根線,分別是RXD(接收數(shù)據(jù))、TXD(發(fā)送數(shù)據(jù))、GND(信號(hào)地)。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-Wstrict-prototypes-Wmissing-prototypes-Wshadow

-Wpointer-arith-Wcast-qual-Winline-I.

CFLAGS=-O2$(WARNINGS)

MATH_LIB=-lm

LIBS=$(MATH_LIB)–lpthread//引用庫(kù)文件

OBJ=serial.omain.o

TARGET=serial//目標(biāo)文件

all:$(TARGET)$(OBJ)

//下面一層層開(kāi)頭編譯

#Applications:

serial:$(OBJ)

$(CC)$(CFLAGS)-o$(TARGET)$(OBJ)$(LIBS)

main.o:main.c

$(CC)$(CFLAGS)-c-o$@$pthread.txt,然后再用catpthread.txt查看文件內(nèi)容,結(jié)合程序分析結(jié)果;

(5)加入一個(gè)新的線程用于處理鍵盤(pán)輸入,并在按特定字符時(shí)終止全部線程。

6、試驗(yàn)報(bào)告要求

(1)寫(xiě)清每步試驗(yàn)步驟及詳細(xì)操作內(nèi)容;

1.進(jìn)入exp/basic/02_pthread名目,使用VI命令即可打開(kāi)源代碼進(jìn)行閱讀

2.運(yùn)行make產(chǎn)生pthread可執(zhí)行文件

3.掛載:服務(wù)器設(shè)置——nfs服務(wù)器(設(shè)置需要共享的名目),設(shè)置開(kāi)發(fā)板的ip地址:ifconfigeth0,在試驗(yàn)箱終端里輸入mount-tnfs-onolock192.168.1.234:/up-techpxa270/exp/mnt/nfs,/mnt/nfs即為共享名目

4.進(jìn)入/mnt/exp/basic/02_pthread名目,運(yùn)行./pthread,觀看運(yùn)行結(jié)果的正確性,若顯示結(jié)果太快,可以用以下命令輸出顯示結(jié)果到pthread.txt文件./pthread>pthread.txt,然后再用catpthread.txt查看文件內(nèi)容,結(jié)合程序分析結(jié)果;

最終的結(jié)果:

put-->998

put-->999

producerstopped!

993-->get

994-->get

995-->get

996-->get

997-->get

998-->get

999-->get

consumerstopped!

5.加入一個(gè)新的線程用于處理鍵盤(pán)輸入,并在按特定字符時(shí)終止全部線程。voidlistener(void*data)

{

if(getch()=’q’){

pthread_cancel(id1);

pthread_cancel(id2);}

pthread_exit(0);

}

(2)寫(xiě)出程序pthread.c的分析;

#include

#include

#include

#include"pthread.h"

#defineBUFFER_SIZE16

/*設(shè)置一個(gè)整數(shù)的圓形緩沖區(qū)*/

structprodcons{

intbuffer;/*緩沖區(qū)數(shù)組*/

pthread_mutex_tlock;/*互斥鎖*/

intreadpos,writepos;/*讀寫(xiě)的位置*/

pthread_cond_tnotempty;/*緩沖區(qū)非空信號(hào)pthread_cond_tnotfull;/*緩沖區(qū)非滿信號(hào)*/

};

/*--------------------------------------------------------*/

/*初始化緩沖區(qū)*/

voidinit(structprodcons*b)

{

pthread_mutex_init(/*初始化后處于解鎖狀態(tài)*/

pthread_cond_init(/*指針為空時(shí)默認(rèn)狀態(tài)*/pthread_cond_init(

b->readpos=0;

b->writepos=0;

}

/*--------------------------------------------------------*/

/*向緩沖區(qū)中寫(xiě)入一個(gè)整數(shù)*/

voidput(structprodcons*b,intdata)

{

pthread_mutex_lock(

/*等待緩沖區(qū)非滿*/

while((b->writepos+1)%BUFFER_SIZE==b->printf("waitfornotfull\n");

pthread_cond_wait(

}

/*寫(xiě)數(shù)據(jù)并且指針前移*/

b->buffer=data;

b->writepos++;

if(b->writepos>=BUFFER_SIZE)b->writepos=/*設(shè)置緩沖區(qū)非空信號(hào)*/pthread_cond_signal(

pthread_mutex_unlock(

}

/*--------------------------------------------------------*/

/*從緩沖區(qū)中讀出一個(gè)整數(shù)*/

intget(structprodcons*b)

{

intdata;

pthread_mutex_lock(

/*等待緩沖區(qū)非空*/

while(b->writepos==b->readpos){

printf("waitfornotempty\n");

pthread_cond_wait(

}

/*讀數(shù)據(jù)并且指針前移*/

data=b->buffer;

b->readpos++;

if(b->readpos>=BUFFER_SIZE)b->readpos=0;

/*設(shè)置緩沖區(qū)非滿信號(hào)*/

pthread_cond_signal(

pthread_mutex_unlock(

returndata;

}

/*--------------------------------------------------------*/

#defineOVER(-1)

structprodconsbuffer;

/*--------------------------------------------------------*/

void*producer(void*data)/*生產(chǎn)者進(jìn)程函數(shù)*/

{

intn;

for(n=0;n%d\n",n);

put(

}

put(

printf("producerstopped!\n");

returnNULL;

}

/*--------------------------------------------------------*/void*consumer(void*data)/*消費(fèi)者進(jìn)程函數(shù)*/

{

intd;

while(1){

d=get(

if(d==OVER)break;

printf("%d-->get\n",d);

}

printf("consumerstopped!\n");

returnNULL;

}

/*--------------------------------------------------------*/intmain(void)

{

pthread_tth_a,th_b;

void*retval;/*存儲(chǔ)被等待線程的返回值*/

init(

pthread_create(

pthread_create(

/*等待生產(chǎn)者和消費(fèi)者結(jié)束*/

pthread_join(th_a,

pthread_join(th_b,

return0;

}

(3)寫(xiě)出修改后的代碼并加以說(shuō)明;

voidlistener(void*data)

{

if(getch()=’q’){

pthread_cancel(id1);

pthread_cancel(id2);}

pthread_exit(0);

}

在main函數(shù)中:

intmain(void)

{

pthread_tth_a,th_b,th_a;

void*retval;

init(

pthread_create(

pthread_create(

pthread_create(

/*等待生產(chǎn)者和消費(fèi)者結(jié)束*/

pthread_join(th_a,

pthread_join(th_b,

pthread_join(th_c,

return0;

}

(4)試驗(yàn)中遇到的問(wèn)題與解決過(guò)程?

試驗(yàn)時(shí)先是看懂代碼,其中有許多函數(shù)都沒(méi)見(jiàn)過(guò),更沒(méi)用過(guò),先是網(wǎng)上查資料,看API文檔,逐一的看懂函數(shù)。然后是整體思路的理解,消費(fèi)者怎么工作,生產(chǎn)者怎么工作,他們是怎么互斥的。然后是改正代碼實(shí)現(xiàn):加入一個(gè)新的線程用于處理鍵盤(pán)輸入,并在按“q“時(shí)終止全部線程。開(kāi)頭為了接收按鍵用了但是linux下沒(méi)有這個(gè)庫(kù)函數(shù),問(wèn)了其他同學(xué),才發(fā)覺(jué)自己將問(wèn)題想簡(jiǎn)單了,直接用getch()即可,然后經(jīng)過(guò)調(diào)試就完成了試驗(yàn)任務(wù)。

試驗(yàn)五內(nèi)核驅(qū)動(dòng)設(shè)計(jì)入門(mén)-模塊方式驅(qū)動(dòng)試驗(yàn)

1、試驗(yàn)?zāi)康?/p>

學(xué)習(xí)在LINUX下進(jìn)行驅(qū)動(dòng)設(shè)計(jì)的原理;把握使用模塊方式進(jìn)行驅(qū)動(dòng)開(kāi)發(fā)調(diào)試的過(guò)程。

2、試驗(yàn)內(nèi)容

在PC機(jī)上編寫(xiě)簡(jiǎn)潔的虛擬硬件驅(qū)動(dòng)程序并進(jìn)行調(diào)試,試驗(yàn)驅(qū)動(dòng)的各個(gè)接口函數(shù)的實(shí)現(xiàn),分析并理解驅(qū)動(dòng)與應(yīng)用程序的交互過(guò)程。

3、預(yù)備學(xué)問(wèn)

有C語(yǔ)言基礎(chǔ);

把握Makefile的編寫(xiě)和使用;

把握Linux下的程序編譯與交叉編譯過(guò)程。

有驅(qū)動(dòng)開(kāi)發(fā)的基本學(xué)問(wèn)。

4、試驗(yàn)設(shè)備及工具

硬件:PC機(jī)pentumn500以上,硬盤(pán)40G以上,內(nèi)存大于128M。

軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+MINI+AMRLINUX開(kāi)發(fā)環(huán)境

5、試驗(yàn)步驟

(1)仔細(xì)閱讀試驗(yàn)原理,理解驅(qū)動(dòng)的體系結(jié)構(gòu)

(2)熟識(shí)程序源代碼及Makefile

(/up-techpxa270/exp/drivers/01_moddriver)

(3)編譯程序

(4)程序掛載

(5)驅(qū)動(dòng)調(diào)試插入模塊insmodhello.ko

(6)刪除模塊rmmodhello.ko

(7)分析demo.c

我們可以直接使用cat/dev/demo調(diào)用驅(qū)動(dòng)的read函數(shù),測(cè)試讀過(guò)程。

6、試驗(yàn)報(bào)告要求

(1)、寫(xiě)清每步試驗(yàn)步驟的詳細(xì)操作內(nèi)容。

1.仔細(xì)閱讀試驗(yàn)原理,理解驅(qū)動(dòng)的體系結(jié)構(gòu)

2.進(jìn)入/up-techpxa270/exp/drivers/01_moddriver名目,使用vi命令打開(kāi)源代碼和Makefile

3.使用make命令編譯程序

4.程序掛載:

服務(wù)器設(shè)置——nfs服務(wù)器(設(shè)置需要共享的名目),設(shè)置開(kāi)發(fā)板的ip地址:ifconfigeth0,在試驗(yàn)箱終端里輸入mount-tnfs-onolock192.168.1.234:/up-techpxa270/exp/mnt/nfs,/mnt/nfs即為共享名目

5.插入模塊:命令insmodhello.ko

6.刪除模塊:命令rmmodhello.ko

7.分析demo.c:使用vi打開(kāi)demo.c文件,并對(duì)比試驗(yàn)指導(dǎo)書(shū)分析各個(gè)函數(shù)的功能。

(2)、模塊與應(yīng)用程序的區(qū)分?

1.應(yīng)用程序是從頭到尾執(zhí)行單個(gè)任務(wù);模塊卻只是預(yù)先注冊(cè)自己以便服務(wù)于將來(lái)的某個(gè)懇求,其中,函數(shù)init_module(模塊的入口)的任務(wù)是為以后調(diào)用模塊函數(shù)預(yù)先做預(yù)備,函數(shù)cleanup_module(模塊的其次入口)是在模塊卸載時(shí)調(diào)用。

2.應(yīng)用程序可以調(diào)用它未定義的函數(shù),由于在連接過(guò)程能夠解析外部引用從而使用適當(dāng)?shù)暮瘮?shù)庫(kù);模塊僅僅被連接到內(nèi)核,因此它僅能調(diào)用有內(nèi)核導(dǎo)出的函數(shù)(如printk),而沒(méi)有任何可連接的庫(kù)。

3.應(yīng)用程序開(kāi)發(fā)過(guò)程中的段錯(cuò)誤是無(wú)害的,并且總是可以使用調(diào)試器跟蹤到源代碼中的問(wèn)題所在;內(nèi)核模塊的一個(gè)錯(cuò)誤即使不對(duì)整個(gè)系統(tǒng)是致命的,也至少會(huì)對(duì)當(dāng)前進(jìn)程造成致命錯(cuò)誤。

4.應(yīng)用程序運(yùn)行于用戶空間,處理器禁止其對(duì)硬件的直接訪問(wèn)以及對(duì)內(nèi)存的未授權(quán)訪問(wèn);內(nèi)核模塊運(yùn)行于內(nèi)核空間,可以進(jìn)行全部操作。

5.應(yīng)用程序一般不必?fù)?dān)憂發(fā)生其他狀況而轉(zhuǎn)變它的運(yùn)行環(huán)境;內(nèi)核模塊編程則必需考慮并發(fā)問(wèn)題的處理。

(3)、編譯、調(diào)試狀況。

編譯后,插入模塊:insmodhello.ko,可在開(kāi)發(fā)板上顯示helloworld!

刪除模塊:rmmodhello.ko,刪除模版時(shí)也會(huì)顯示一句話。

試驗(yàn)六Qt/E應(yīng)用程序設(shè)計(jì)

1、試驗(yàn)?zāi)康?/p>

1.了解在Linux下安裝Qt以及Qt/Embedded的基本步驟;

2.學(xué)會(huì)在嵌入式設(shè)備上Qt/E平臺(tái)下使用Virtualframebuffer顯示程序結(jié)果;

2、試驗(yàn)內(nèi)容

1.在Linux下編譯和使用Qt/E平臺(tái);

2.在Qt/E平臺(tái)下編譯和運(yùn)行一個(gè)程序使用Virtualframebuffer顯示運(yùn)行結(jié)果;并且運(yùn)行結(jié)果可以在試驗(yàn)箱上顯示。

3、預(yù)備學(xué)問(wèn)

1.熟識(shí)使用C++語(yǔ)言程序設(shè)計(jì);

2.把握Linux下常用編輯器的使用;

3.把握Linux下程序編譯;

4.熟識(shí)Qt程序設(shè)計(jì);

4、試驗(yàn)室設(shè)備和工具

硬件:PC機(jī)Pentumn500以上,硬盤(pán)10G以上。

軟件:PC機(jī)操作系統(tǒng)REDHATLINUX9.0+MINI+ARM-LINUX開(kāi)發(fā)環(huán)境

5、試驗(yàn)步驟

(1)解壓安裝包并設(shè)置環(huán)境變量

(2)編譯Qt/Embedded

(3)查看運(yùn)行結(jié)果

(4)在開(kāi)發(fā)板上看運(yùn)行結(jié)果

6、試驗(yàn)報(bào)告要求

(1)、寫(xiě)出詳細(xì)試驗(yàn)流程及操作內(nèi)容

1.解壓安裝包并設(shè)置環(huán)境變量

安裝Tmake

cd~/pxa270Qt

tar–xzftmake-1.13.tar.gz

exportTMAKEDIR=$PWD/tmake-1.13

安裝Qt2.3.2

cd~/pxa270Qt

tar–xzfqt-x11-2.3.2.tar.gz

exportQT2DIR=$PWD/qt-2.3.2

安裝Qt/Embedded

cd~/pxa270Qt

tar–xzfqt-embedded-2.3.10-free.tar.exportQTEDIR=$PWD/qt-2.3.10

2.編譯Qt/Embedded

BuildQt2.3.2

cd$QT2DIR

exportTMAKEPATH=$TMAKEDIR/lib/linux-g++

exportQTDIR=$QT2DIR

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論