版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、LINUX嵌入式實(shí)驗(yàn)報告- - TOC o 1-5 h z 目錄 1.實(shí)驗(yàn)一:嵌入式Linux 開發(fā)流程2.實(shí)驗(yàn)二:嵌入式Linux 開發(fā)環(huán)境搭建6.實(shí)驗(yàn)三:串行端口程序設(shè)計(jì) 1.1. HYPERLINK l bookmark4 o Current Document 實(shí)驗(yàn)四: A/D D/A 接口實(shí)驗(yàn)1.6 HYPERLINK l bookmark6 o Current Document 實(shí)驗(yàn)五:圖形界面應(yīng)用程序設(shè)計(jì)1.8實(shí)驗(yàn)六:內(nèi)核與根文件系統(tǒng)實(shí)驗(yàn)2.3 HYPERLINK l bookmark8 o Current Document 實(shí)驗(yàn)七:驅(qū)動程序設(shè)計(jì)實(shí)驗(yàn) 2.9.實(shí)驗(yàn)八:無線通信實(shí)驗(yàn)3
2、.3.Linux 開發(fā)流程實(shí)驗(yàn)?zāi)康牧私馇度胧絃inux 的開發(fā)流程,會進(jìn)行簡單的開發(fā)。實(shí)驗(yàn)內(nèi)容進(jìn)行 Linux 的開發(fā)流程的簡單介紹。實(shí)驗(yàn)步驟嵌入式 Linux 開發(fā),根據(jù)應(yīng)用需求的不同有不同的配置開發(fā)方法,但是一般都要經(jīng)過以下過程:建立開發(fā)環(huán)境,操作系統(tǒng)一般使用REDHAT-LINUX, 版本 7到 9 都可以,選擇定制安裝或全部安裝,通過網(wǎng)絡(luò)下載相應(yīng)的 GCC 交叉編譯器進(jìn)行安裝(比如arm-linux-gcc 、arm-uclibc-gcc) ,或者安裝產(chǎn)品廠家提供的交叉編譯器。使用 Linux 的 Red Linux 9 的開發(fā)界面截圖如下:配置開發(fā)主機(jī),配置 MINICOM, 一般參
3、數(shù)為波特率115200,數(shù)據(jù)位 8 位, 停止位 1 , 無奇偶校驗(yàn),軟硬件控制流設(shè)為無。在 WINDOWS 下的超級終端的配置也是這樣,MINICOM軟件的作用是作為調(diào)試嵌入式開發(fā)板信息輸出的監(jiān)視器和鍵盤輸入的工具;配置網(wǎng)絡(luò),只要是配置NFS 網(wǎng)絡(luò)文件系統(tǒng),需要關(guān)閉防火墻,簡化嵌入式網(wǎng)絡(luò)調(diào)試環(huán)境設(shè)置過程。系統(tǒng)配置截圖如下:建立引導(dǎo)裝載程序BOOTLOADER, 從網(wǎng)絡(luò)上下載一些公開源代碼 的 BOOTLOADER, 如 -BOOT 、 BLOB 、 VIVI 、 LILO 、ARM-BOOT 、 RED-BOOT 等, 根據(jù)自己具體芯片進(jìn)行移植修改。有些芯片沒有內(nèi)置引導(dǎo)裝載程序,比如三星的A
4、RM7 、 ARM9 系列芯片,這樣就需要編寫燒寫開發(fā)板上的flash 的燒寫程序,網(wǎng)絡(luò)上有免費(fèi)下載的WINDOWS 下通過 JTAG 并口簡易仿真器燒寫 ARM 外圍 flash 芯片程序。ViVi 運(yùn)行的截圖如下:開發(fā)應(yīng)用程序,可以下載到根文件系統(tǒng)中,也可以放在YAFFS、JFFS2文件系統(tǒng)中,有的應(yīng)用程序不使用根文件系統(tǒng),而是直接將應(yīng)用程序和內(nèi)核設(shè)計(jì)在一起,這有點(diǎn)類似于UCOS-II 的方式。燒寫內(nèi)核,根文件系統(tǒng),應(yīng)用程序,發(fā)布產(chǎn)品。Linux 開發(fā)環(huán)境搭建實(shí)驗(yàn)?zāi)康牧私獠⑶艺莆誏inux 的開發(fā)環(huán)境搭建方法。實(shí)驗(yàn)內(nèi)容進(jìn)行嵌入式Linux 開發(fā)環(huán)境搭建實(shí)驗(yàn)步驟1. REDHAT LINUX
5、 9.0 的安裝PC 上安裝 RedHat LINUX9.0 ,選擇 Custom 定制安裝,在選擇軟件Package時最好2.7G,如果選擇最后一項(xiàng):everything,即完全安裝,將安裝3張光盤的全部軟件,需要磁盤空間大約5G。因此建議提前為REDHAT LINUX 的安裝項(xiàng),5 15G 的空間,具體視用戶的磁盤空間大小來確定,在安裝完Redhat 后還要安裝Linux 的編譯器和開發(fā)庫以及ARM-Linux 的所有源代碼,這些包安裝后的總共需要空間大800M 。Linux 如下;2. 開發(fā)工具軟件的安裝安裝環(huán)境搭建如上。3. 開發(fā)環(huán)境配置配置網(wǎng)絡(luò),包括配置IP 地址、 NFS 服務(wù)、防
6、火墻。網(wǎng)絡(luò)配置主要是要安裝好以太網(wǎng)卡,對于一般常見的RTL8139 網(wǎng)卡, READHA T9.0 可以自動識別并自動安裝好,完全不要用戶參與,因此建議使用該網(wǎng)卡。然后配置宿主機(jī)IP 為 21 。如果是在有多臺計(jì)算機(jī)使用的局域網(wǎng)環(huán)境使用此開發(fā)設(shè)備,IP 地址可以根據(jù)具體情況設(shè)置,如圖所示:雙擊設(shè)備eth0 的藍(lán)色區(qū)域,進(jìn)入以太網(wǎng)設(shè)置界面對于 REDHA T9.0, 它默認(rèn)的是打開了防火墻,IP 訪問它全部拒絕,即無法用NFS mount 它, 許多網(wǎng)絡(luò)功能都將無Minicom 的配置如下:四、實(shí)驗(yàn)總結(jié)通過本次實(shí)驗(yàn)我學(xué)會了關(guān)于Linux 配置的一些基本的應(yīng)用,感覺收獲特別大,這就算入一、實(shí)驗(yàn)?zāi)康?/p>
7、了解在 Linux 環(huán)境下串行程序的基本方法。掌握終端的主要屬性及設(shè)置方法,熟悉終端I/O 函數(shù)的使用。學(xué)習(xí)使用多線程完成串口的收發(fā)處理。二、實(shí)驗(yàn)內(nèi)容讀懂程序源代碼,學(xué)習(xí)終端I/O 函數(shù)的使用方法,學(xué)習(xí)將多線程編程應(yīng)用到串口的接受和發(fā)送程序設(shè)計(jì)中。三、預(yù)備知識有 C 語言的基礎(chǔ)掌握在 Linux 下常用編輯器的使用。掌握Makefile 的編寫和使用。掌握Linux 下的程序編譯與交叉編譯過程。四、實(shí)驗(yàn)原理異步串行I/O 方式是將傳輸數(shù)據(jù)的每個字符一位接一位(例如先低位、后高位)地傳送。數(shù)據(jù)的各不同位可以分時使用同一傳輸通道,因此串行I/O 可以減少信號連接線,最后用一對線即可進(jìn)行。接收方對于
8、同一根線上一連串的數(shù)字信號,首先要分割成位,再按位組成字符。為了恢復(fù)發(fā)送的信息,雙方必須協(xié)調(diào)工作。在微型計(jì)算機(jī)中大量使用異步串行I/O 方式, 雙方使用各自的時鐘信號,而且允許時鐘頻率有一定誤差,因此實(shí)現(xiàn)較容易。但是由于每個字符都要獨(dú)立確定起始和結(jié)束(即每個字符都要重新同步),字符和字符間還可能有長度不定的空閑時間,因此效率較低。上圖給出異步串行通信中一個字符的傳送格式。開始前, 線路處于空閑狀態(tài),送出連續(xù)“ 1 ”。傳送開始時首先發(fā)一個“ 0” 作為起始位,然后出現(xiàn)在通信線上的是字符的二進(jìn)制編碼數(shù)據(jù)。每個字符的數(shù)據(jù)位長可以約定為5 位、 6 位、 7 位或 8 位,一般采用ASCII 編碼。
9、后面是奇偶校驗(yàn)位,根據(jù)約定,用奇偶檢驗(yàn)位將所傳字符中“1 ”的位數(shù)湊成奇數(shù)個數(shù)或偶數(shù)個數(shù)。也可以也可以約定不要奇偶校驗(yàn)位,這樣就取消奇偶校驗(yàn)位。最后是表示停止位的“1”信號,這個停止位可以約定持續(xù)1 位、 1.5 位或 2位的時間寬度。至此一個字符傳送完畢,線路又進(jìn)入空閑,持續(xù)為 “ 1”。 經(jīng)過一段隨機(jī)的時間后,下一個字符開始傳送才有發(fā)出起始位。每一個數(shù)據(jù)位的寬度等于傳送波特率的倒數(shù)。微機(jī)異步串行通信中,常用的波特率為50.95,110,150,300,600,1200,2400,4800,9600 等。接收方按約定的格式接收數(shù)據(jù),并進(jìn)行檢查,可以查出以下三種錯誤:奇偶錯:在約定奇偶檢查的情
10、況下,接收到的字符奇偶狀態(tài)和約定不符。幀格式錯:一個字符從起始位到停止位的總尾數(shù)不對。溢出錯:若先接收的字符尚未被微機(jī)讀取,后面的字符又傳送過來,則產(chǎn)生溢出錯。每一種錯誤都會給出相應(yīng)的出錯信息,提示用戶處理。一般串口調(diào)試都使用空的MODEM 連接電纜,其連接方式如下:五、程序分析本實(shí)驗(yàn)的代碼如下:#include#include#include#include#include#include#define BAUDRATE B115200#define COM1 “ /dev/ttyS0 ”#define COM2 “ /dev/ttyS1 ”define ENDMINITERM 27 /*E
11、SC to quit miniterm*/define FAL SE 0define TRUE 1volatile int STOP=FALSE;volatile int fd;void child_handler(int s)print( “ stop!n ” );STOP=TRUE;/*/Void* keyboard(void* date) Int c;For(;)c=getchar();if(c=ENDMINITERM)STOP=TURE;Break;Return NULL;/*/ /*modem input handle*/Void* receive(void* date) Int c
12、;Printf( “ read modemn ” );While(STOP=FALSE)Read(fd,&c,1);/*com port*/Write(1,&c,1);/*stdout*/Printf( “ exit form reading modemn ” );Return NULL;/*/Void* send(void* date) Int = 0 ;Printf( “ send daten ” );While(STOP=FALSE)/*modem input handler*/ C+;C%=255;Write(fd,&c,1);/*stdout*/Usleep(100000);Retu
13、rn NULL;/*/Int main (int argc,char*argv) Struct termios oldtio,newtio,oldstdio,newstdio;Struct sigaction sa;Int ok;Pthread_t th_a;th_b,th_c;Void *retval*If(argc1)Fd=open(COM2,O_RDWR);ElseFd=open(COM1,O_RDWR);/|O_NOCTTY|O_NONBLOCK);If(fd0)Error(COM1);Exit(-1);Tcgetattr(0,&oldstdio);Tcgetattr(fd,&oldt
14、io); /*save current modem settings*/Tcgetattr(fd,&newstdio); /*get working stdio*/Newtio.c_cflag=BAUDRATE|CRTSCTS|CS8|CLOCAL|CREAD; /*ctrol flag*/ Newtio.c_iflag=IGNPAR; /*input flag*/Newtio.c_oflag=0; /*output flag*/Newtio.c_lfag=0;Newtio.c_ccVMIN=1;Newtio.c_ccVTIME=0;/*now clean the modem line and
15、 activate the settings for modem*/Tcflush(fd,TCIFLUSH);Tcsetattr(fd,TCSANOW,&newtio); /*set attrib*/ Sa.sa_handler=child_handler;Sa.sa_flags=0;Sigaction(SIGCHLD,&sa,NULL);Pthread_creat(&th_a,NULL,keyboard,0);Pthread_creat(&th_b,NULL,receive,0);Pthread_creat(&th_c,NULL,send,0);Pthread_join(th_a,&retv
16、al);Pthread_join(th_b,&retval);Pthread_join(th_c,&retval);Tcsetattr(fd,TCSANOW,&roldtio); /*restore old modem setings*/Tcsetattr(0,TCSANOW,&oldstdio); /*restore old tty setings*/Close(fd);Exit(0);六、實(shí)驗(yàn)步驟閱讀理解源碼進(jìn)入 expbasic03_tty 目錄,使用vi 編輯器或其他編輯器閱讀理解源代碼。編譯應(yīng)用程序下載調(diào)試切換到 minicom 終端窗口,使用NFS mount 開發(fā)主機(jī)的/arm2
17、410s 到 /host 目錄。進(jìn)入expbasic03_tty 目錄,運(yùn)行term ,觀察運(yùn)行結(jié)果的正確性。rootzxt root#minicom/mnt/yaffs mount -t nfs -o nolock 6:/arm2410s /host/mnt/ysffscd/host/exp/basic/03-tty/host/exp/basic/03_tty.termRead modemSend date123456789:;?ABCDEFGHIGHLMNOPQRSTUVWX由于內(nèi)核已經(jīng)將串口1 作為終端控制臺,所以可以看到term 發(fā)出的數(shù)據(jù),卻無法看到開發(fā)主機(jī)發(fā)來的數(shù)據(jù),可以使用另外一
18、臺主機(jī)連接串口2 進(jìn)行收發(fā)測試。Ctrl+c 可使程序強(qiáng)行退出。注意:如果在執(zhí)行./term 時出現(xiàn)下面的錯誤,可以通過我們前文提到的方法建立一個連接來解決。/dev/ttySO:No such file or directory解決方法:/mnt/yaffscd /dev/dev ln -sf /dev/tts/0 ttySO (注意首字母是1,不是數(shù)字1)A/D D/A 接口實(shí)驗(yàn)AD 部分一 實(shí)驗(yàn)?zāi)康牧私庠?LINUX 環(huán)境下對S3C2410 芯片的 8 通道 10 位 A/D 的操作與控制二 實(shí)驗(yàn)內(nèi)容學(xué)習(xí) AD 接口遠(yuǎn)離,了解實(shí)現(xiàn)AD 系統(tǒng)對于系統(tǒng)的軟件和硬件要求,閱讀ARM 芯片文件,
19、 掌握 ARM 的 AD 相關(guān)寄存器的功能,熟悉 ARM 系統(tǒng)硬件的AD 相關(guān)接口uliyong 外部模擬信號編程實(shí)現(xiàn)ARM 循環(huán)采集全部前4 路通道,并且在超級終端上顯示。三 實(shí)驗(yàn)步驟.進(jìn)入/arm2410s/exp/basic/04_ad 目錄,使用vi 編輯器或者其他編輯器悅讀理解源代碼。.變異應(yīng)用程序運(yùn)行 make 產(chǎn)生 ad可執(zhí)行文件rootzxt/#cd/arm2410s/exp/basic/04_ad/rootzxt04_ad#makearmv41-unknown-linus-gcc-c-o main.o main.carmv41-unknown-linux-gcc-o./bin
20、/ad main.o-lpthreadarmv41-unknown-linux-gcc-o ad main.o-lpthreadrootzxt04_ad#1sAd hardware.h main.oMakefile.bak s3c2410-adc.hBin main.cMakefile readme.cxt src下載調(diào)試換到 minicom 終端窗口,使用NFSmount 開發(fā)主機(jī)的/arm2410s到 /host 目錄rootzxtroot#minicom/mnt/yaffsmount-tnfs-o nolock 6:/arm2410s/host/mnt/yaffscd/host/esp/
21、basic/04_ad/host/exp/basic/04_ad./adPress Enter key exit!a0=0.0032a1=3.2968a2=3.2968我們可以通過調(diào)節(jié)開發(fā)板上的三個黃色的電位器,來看a0,a1,a2,的變化DA 部分一 實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)DA 轉(zhuǎn)換原理掌握MAX504DA 轉(zhuǎn)換芯片的使用方法掌握不帶有DA 的 CPU 擴(kuò)展 DA 功能的主要方法了解DA 驅(qū)動程序加入內(nèi)核的方法二 實(shí)驗(yàn)內(nèi)容學(xué)生DA 接口原理,了解實(shí)現(xiàn)DA 系統(tǒng)對于系統(tǒng)的軟件和硬件的要求三 實(shí)驗(yàn)步驟閱讀理解源碼進(jìn)入 /arm2410s/exp/basic/05_da 目錄,使用vi 編輯器或者其他編輯器
22、閱讀理解源代碼. 編譯應(yīng)用程序運(yùn)行 make 產(chǎn)生 da 可執(zhí)行文件da_mainrootzxt/#cd/arm2410s/exp/basic/05_ad/rootzxt04_ad#makearmv41-unknown-linus-gcc-c-o main.o main.carmv41-unknown-linux-gcc da_main.o-o da_mainrootzxt05_da#1sda_main da_main.c da_main.o doc driversMakefile s3c44b0-spi.h.下載調(diào)試切換到 minicom 終端窗口,使用NFS mount 開發(fā)主機(jī)的/arm
23、2410s到 /host目錄然后進(jìn)入/host/exp/05_da/drivers 目錄,用insmod exio.o 命令插入DA 驅(qū)動,并且用1smod 命令查看是否已經(jīng)插入/mnt/yaffscd/host/esp/basic/05_ad/host/exp/basic/05_adcd drivers/host/exp/basic/05_ad 、 driversinsmod exio.oUsing exio.o/host/exp/basic/05_ad/drivers1smodModule Sive Used bu Not taintedExio 23840(unused)I2c-tops
24、2 141040(unused)進(jìn)入 /host/exp/basic/05_da 目錄,運(yùn)行./da_main 觀察運(yùn)行結(jié)果的正確性,在輸入 ./da_main 后會出現(xiàn)下面的提示信息/host/exp/basic/05_da./da_mainError parameterInput as:./ad_main da_id numda_id:select between 0 and 1num:range0.04.096這是由于我們沒有制定參數(shù)造成的,他的格式為./da_mainda 的 id 號 數(shù)字 , 我們可以通過選擇 0 或 1 來決定輸出到開發(fā)板上的哪個DA 接口,同時還需要在0.04.
25、096V 之間來選擇一個輸出電壓,下面的例子是用了開發(fā)板上的DA0 且輸出 1V 的電壓,我們可以使用萬用表對其進(jìn)行測量。/host/exp/basic/05_ad./da_main0 1CurrentVoltage is 1.000000v四實(shí)驗(yàn)總結(jié)通過本次實(shí)驗(yàn)我了解到一些關(guān)于DA AD 的相關(guān)知識。實(shí)驗(yàn)五:圖形界面應(yīng)用程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康牧私庠?Linux 下安裝 Qt以及 Qt/Embedded 的基本步驟;學(xué)會在 Qt/E 平臺下使用Virtual framebuffer 顯示程序結(jié)果。二、實(shí)驗(yàn)內(nèi)容 在 Linnux 下編譯和使用Qt/E 平臺;在 Qt/E 平臺下編譯和運(yùn)行一個程序使
26、用Virtual framebuffer 顯示運(yùn)行結(jié)果。三、實(shí)驗(yàn)步驟該在 Trolltech 公司的網(wǎng)站上可以下載該公司所提供的Qt/Embedded 的免費(fèi)版本,在安裝產(chǎn)品光盤以后,本次實(shí)驗(yàn)?zāi)夸浵乱延幸螺d的文件,在/arm2410s/gui/Qt/src 下。在做實(shí)驗(yàn)錢吧本次實(shí)驗(yàn)用到的三個文件拷貝到/root/2410sQt 目錄下。rootBC root#cd/root/rootBC root#mkdir2410sQtrootBC root#cd/arm2410sQt/gui/Qt/srcrootBC src#cp-arftmake-1.13.tar.gz qt-embedded-2.3
27、.10-free.tar.gzQt-x11-2.3.2tar.gz/root/24110sQt安裝編譯器arm-linux-gcc-3.4.1:rootBC src #cd/arm2410s/gui/Qt/toolsrootBC tools#tar xjvfarm-linux-gcc-3.4.1.tar.bz2-C./rootBC tools#vi/root/.bash profile/ 打 開 文 件 , 將 該 文 件 中 的 PATH 變 亮 改 為PATH=$PATH:$HOME/bin:/arm2410s/gui/Qt/tools/usr/local/arm/3.4.1/bin/,
28、存盤后退出。rootBC tools#source/root/.bash profile如果要正確安裝的話,在任意路徑下輸入ar 后按Tab 鍵即可列出編譯器文件。Qt/Embedded 平臺的搭建需要以下幾步:1、安裝 Tmakecd/2410Qt tar-xzftmake-1.13.tar.gzexportTMAKEDIR=$PWD/tmake-1.132、安裝Qt2.3.2cd/2410sQt tar-xzftqt-2.3.2.tar.gzexportTMAKEDIR=$PWD/qt-2.3.23、安裝Qt/Embeddedcd/2410sQt tar-xzftqt-2.3.10-fre
29、e.tar.gzexportTMAKEDIR=$PWD/qt-2.3.10環(huán)境變量的設(shè)置是非常重要的,它關(guān)系到能否正確的安裝及編譯這些安裝包,下面介紹一下這些環(huán)境變亮:TMAKEDIR: 只想用于編譯Qt/Embedded 的 Tmake 工具QT2DIR: :指向qt-2.3.2 的文件夾QTEDIR: :指向qt-2.3.10 的文件夾第二步,編譯Qt/Embedded1.Build Qt2.3.2cd$QT2DIRexport TMAKEPATH=4TMAKEDIR/lib/linux-g+exportQTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHex
30、portLD_LIBbin/RARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH/configure-no-xft/ 出 現(xiàn) 選項(xiàng)時都要輸入yesmakecp-artbin/uic$QTEDIR/bin/./configure 是對 Qt 進(jìn)行配置,它包括很多選項(xiàng),例如可以通過添加“-no-opengl”等,如果想要進(jìn)一步了解可以通過鍵入。/configure help 來獲得更多的幫助信息。編譯完成后需要將生成的/bin/uic 復(fù)制到¥QTEDIR 下創(chuàng)建的目錄bin,因?yàn)樵陔S后的編譯 Qt/Embedded 的時候會用到這個工具。Build Qvfbexport T
31、MAKEPATH=$TMAKEDIR/lib/linux-g+export QTDIR=$QT2DIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PA TH=$QTDIR/lib:$ LD_LIBRARY_PATHcd $QTESIR/tools/qvfb/root/2410s/tmake-1.13/bin/tmake-o Makefile makemv qvfb $QTEDIR/bin/這一步 build qvfb 并建立了從Qt/Embedded2.3.10 到 Qt/Embedded2.3.2 的靜態(tài)的鏈接。其中qvfb 工具用來生成Vir
32、tual framebuffer, 這是一個非常有用的工具,它可以模擬在開發(fā)板上的顯示情況,如果在Virtual framebuffer 中運(yùn)行沒有問題的話,可以直接通過交叉編譯在開發(fā)板上運(yùn)行。Build Qt/Embeddedcd $QTEDIRexport TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g+export QTDIR=$QTEDIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PA TH=$QTDIR/lib:$ LD_LIBRARY_PATH ./CONFIGURE-NO-XFT-QVFB-DEPT
33、HS4.8,16,32YESmake 在配置 ./configure 中 -qvfb 用來支持Virtual framebuffer-depths4,8,16,32 支持 4 位, 8位, 16 位, 32 位,的顯示深度,此外還可以添加如-syestem-jpeg 和 -gif 來提供對jpeg和 gif 的支持。配置系統(tǒng)同時還支持對特定平臺系統(tǒng)選項(xiàng)的添加,但一般來講,凡是支持 framebuffer 的 linux 系統(tǒng)都可以使用“l(fā)inux-generic-g+ ”平臺。詳細(xì)的配置信息可以通過運(yùn)行./configure help 命令來查看。第四步,查看運(yùn)行結(jié)果,如果上面各步都能夠成功的
34、編譯通過,下面就可以通過運(yùn)行Qt/Embedded 自帶的 demo 來查看結(jié)果。在 Virtual framebuffer 上運(yùn)行 ;export QTDIR=$QTEDIRexport PATH=$QTDIR/bin:$PATHexport LD_LIBRARY_PA TH=$QTDIR/lib:$ LD_LIBRARY_PATHcd $QTESIR/examples/launcher/qvfb-width640-height 480&sleep 10./launcher-qws運(yùn)行結(jié)果如下:將上面的步驟完成后,沃恩就已經(jīng)建立好了在本機(jī)上開發(fā)Qt 應(yīng)用程序的環(huán)境,下面我們通過編寫一個“he
35、llo embedded”的程序來了解Qt 程序設(shè)計(jì)。rootBCqt-2.3.10#cd/root/2410sQt/rootBC2410sQt#mkdir exprootBC2410sQt#cd exprootBC exp#vi hello.cpp使用 VI 編寫文件hello.cpp,程序代碼如下:/hello.cpp#include#includeInt main(int argc,char*argv)QApplication app(argc,argv);QLabel*hello=new QLabei( “hello qt/embedded”,0);App.setMainWidget(
36、hello);Hello-show();Return app.exec();現(xiàn)在開始逐行講解一下每一句的意思,中我了這些以后可以幫助我們更加了解QT 的程序設(shè)計(jì)。第 1 行和第二行包含了兩個頭文件,這兩個頭文件中包含qapplication 和 qlabel 類的定義。第 5 行創(chuàng)建了一個qapplication 對象,用于管理整個程序的資源,它需要兩個參數(shù),因?yàn)閝t本身需要一些明林行的參數(shù)。第 6 行創(chuàng)建了一個用來顯示hello qt/embedded! 的部件。在 QT 中, 都是一個可視化的用戶接口,按鈕,菜單,滾動條都是部件的實(shí)例。部件可以包含其他部件,例如,一個應(yīng)用程序窗口通常是一個
37、包含QMenuBar,QToolBar,QStatusBar 和其他的部件。在 QLable 含糊中的參數(shù)0 表示,這是一個窗口而不是嵌入到其他窗口中的部件。第 7 行設(shè)置 hello 部件為程序的主部件,當(dāng)用戶關(guān)閉主部件后,應(yīng)用程序?qū)魂P(guān)閉。如果沒有主部件的話,即使用戶關(guān)閉了程序也會在后他繼續(xù)運(yùn)行。第 8 行使 hello 部件可視,一百年來說部件被創(chuàng)建后都是被隱藏的,因此可以顯示在前根據(jù)需要來定制部件,這樣的好處是可以避免部件創(chuàng)建所造成的閃爍。第 9 行把程序的控制權(quán)交還給 Qt,這時候程序就進(jìn)入就緒模式,可視隨時被用戶行為激活,例如點(diǎn)擊鼠標(biāo),敲擊鍵盤等。下面我們喲啊讓我們的程勛運(yùn)行起來
38、,首先要讓它能夠在Virtual framebuffer 中顯示出來,然后再通過交叉編譯在開發(fā)板上運(yùn)行。要在本機(jī)的Virtual framebuffer 中顯示結(jié)果,下面幾個步驟是必須的:生成工程文件(.pro)每一個qt 程序都對應(yīng)一個工程文件,因?yàn)閠make 工具要借此工程生成相應(yīng)makefile 文件。生成工程文件使用progen 工具,他的位置在$tmakedir/bin 下使用 progen 生成工程文件的方法如下:$TMAKEDIR/bin/ 生成的這個 工程文件是可以被修飾的,可以編輯里面的頭文件,源文件等內(nèi)容。生成 makefile 文件QT 提供生成makefile 文件的工
39、具tmake, 這極大地方便了應(yīng)用程序的開發(fā),節(jié)省了大量的時間,而且還可根據(jù)不同平臺的需要生成適合于不同平臺的makefile 文件。在使用 tmake 工具前,必須查看相應(yīng)的環(huán)境便令是否正確,由于我們要編譯在本機(jī)上運(yùn)行的 QT 程序,所以指定的編譯器應(yīng)為“l(fā)inux-x86-g+ ”,在命令行中輸入下面的命令來檢查環(huán)境變量是否正確:echo$TMAKEPATH 查看返回的結(jié)果的結(jié)尾字符是否是“ /qws/linux-x86-g+ ” ,如果不是的話,需要在命令行中重新設(shè)置TMAKEPA TH export TMAKEPATH=/tmake 的安裝路徑 (如 $TMAKEDIR ) /lib/
40、qws/linux-x86-g+ 此外還要使QTDIR 指向 QT/EMBEDDED的安裝路徑,如: export QTDIR=$QTEDIR 或者直接指定路徑export QTDIR= /qt-2.3.10完成了上面的環(huán)境變量的設(shè)置,并用echo 命令檢查無誤以后,就可以以使用tmake 工具來生生我們需要的makefile 文件,在命令行中如下命令:$TMAKEDIR/bin/tmake-0Makefile 完成上面的步驟以后就可以在當(dāng)前的目錄中生成一個makefile 文件,關(guān)于makefigure文件的功能和結(jié)構(gòu)這里就不在做過多的介紹了,可以參考前面的張杰來了解makefile 。最后
41、在命令行中輸入“make”命令就可以對整個程序驚醒編譯連接了。最后生成一個二進(jìn)制的可執(zhí)行文件hello。用Virtual framebuffer 顯示效果如下:我們可以通過對QLabel*hello QLabel( “ Hello Qt/Embedded! ” ,0)這句話進(jìn)行修改使我們的QLabel程 序 顯 示 起 來 更 為 美 觀 , 修 改 如 下 : QLabel*hello ( “ Hello ” ”Qt/Embedded! ” ,0) ;修改后顯示效果如圖所示:通過本次實(shí)驗(yàn)我學(xué)會GUI 的基本設(shè)計(jì),收獲頗多。了解Linux 的內(nèi)核與根文件的概念,學(xué)會他們的燒寫。結(jié)合實(shí)驗(yàn)指導(dǎo)書進(jìn)
42、行內(nèi)核與根文件系統(tǒng)的燒寫。燒寫Linux 內(nèi)核程序。首先安裝驅(qū)動程序,需要進(jìn)行相關(guān)驅(qū)動的安裝,點(diǎn)擊添加硬件,如圖所示:選擇下一步,截圖如下:添加 Giveio點(diǎn)擊下一步安裝安裝好了截圖如圖所示:好了之后,需要燒寫VIVI使用 CMD 打開燒寫程序在此后出現(xiàn)的三次要求輸入?yún)?shù),第一次是讓選擇Flash,,選0,然后回車如圖所示:第二次是選擇jtag 對 flash 的兩種功能,也選0,然后回車,如圖所示:第三次是讓選擇起始地址,選0,然后回車,等待大約3-5 分鐘的燒寫時間,如圖所示:VIVI 燒寫完畢后選擇參數(shù)2,退出燒寫。如圖所示:至此內(nèi)核燒寫完畢四燒寫根文件系統(tǒng)在 vivi 狀態(tài)下,輸入燒
43、寫根文件的命令為:tftp flash root root.cramfs.如圖所示:至此根文件系統(tǒng)燒寫完畢!四 . 實(shí)驗(yàn)總結(jié)通過本次的實(shí)驗(yàn)我學(xué)會了Linux 內(nèi)核的燒寫和根文件系統(tǒng)的燒寫,感覺 linux 學(xué)起來很難,以后會繼續(xù)努力。實(shí)驗(yàn)七:驅(qū)動程序設(shè)計(jì)實(shí)驗(yàn)一實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)在 LINUX 下進(jìn)行驅(qū)動設(shè)計(jì)的原理;掌握使用模塊方式進(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)步驟Linux 中的驅(qū)動設(shè)計(jì)是嵌入式Linux 開發(fā)中十分重要的部分,他要求開發(fā)者不僅要熟悉Linux 的內(nèi)核機(jī)制、驅(qū)
44、動程序與用戶級應(yīng)用程序的接口關(guān)系、考慮系統(tǒng)中對設(shè)備的并發(fā)操作等等,而且還要非常熟悉所開發(fā)硬件的工作原理。這對驅(qū)動開發(fā)者提出了比較高的要求,這個實(shí)驗(yàn)主要是給大家進(jìn)入驅(qū)動設(shè)計(jì)提供一個簡單入門的實(shí)例,并不需要提供太多與硬件相關(guān)的內(nèi)容,這部分應(yīng)該是通過仔細(xì)閱讀芯片廠家提供的資料來解決。驅(qū)動程序的作用是應(yīng)用程序與硬件之間的一個中間軟件層,驅(qū)動程序應(yīng)該為應(yīng)用程序展現(xiàn)硬件的所有功能,不應(yīng)該強(qiáng)加其他的約束,對于硬件使用的權(quán)限和限制應(yīng)該由應(yīng)用程序?qū)涌刂?。但是有時驅(qū)動程序的設(shè)計(jì)是跟所開發(fā)的項(xiàng)目相關(guān)的,這時就可能在驅(qū)動層加入一些與應(yīng)用相關(guān)的設(shè)計(jì)考慮,主要是因?yàn)樵隍?qū)動層的效率比應(yīng)用層高,同時為了項(xiàng)目的需要可能只強(qiáng)化或
45、優(yōu)化硬件的某個功能,而弱化或關(guān)閉其他的一些功能;到底需要展現(xiàn)硬件的那些功能全都由開發(fā)者根據(jù)需要而定。 驅(qū)動程序有時會被多個進(jìn)程同時使用,這時我們要考慮如何處理并發(fā)的問題,就需要調(diào)用一些內(nèi)核的函數(shù)使用互斥量和鎖等機(jī)制。驅(qū)動程序主要需要考慮下面三個方面:提供盡量多的選項(xiàng)給用戶,提高驅(qū)動程序的速度和效率,盡量使驅(qū)動程序簡單,使之易于維護(hù)。Linux 的驅(qū)動開發(fā)調(diào)試有兩種方法,一種是直接編譯到內(nèi)核,再運(yùn)行新的內(nèi)核來測試;二是編譯為模塊的形式,單獨(dú)加載運(yùn)行調(diào)試。第一種方法效率低,但在某些場合是唯一的方法。模塊方式調(diào)試效率很高,它使用insmod工具將編譯的模塊直接插入內(nèi)核,如果出現(xiàn)故障,可以使用rmmo
46、d 從內(nèi)核中卸載模塊。不需要重新啟動內(nèi)核,這使驅(qū)動調(diào)試效率大大提高。我們的實(shí)驗(yàn)在PC機(jī)和 UP-NETARM2410-S 上都可以運(yùn)行,編譯時使用不同的編譯器就可以了。.閱讀和理解源代碼進(jìn)入/arm2410s/exp/drivers/demo,使用vi 編輯器或其他編輯器閱讀理解源代碼。.編譯驅(qū)動模塊及測試程序上面介紹了在Makefile 中有兩種編譯方法,可以在本機(jī)上使用gcc也可以使用交叉編譯器進(jìn)行編譯。.測試驅(qū)動程序如果使用gcc編譯的話,需要通過下面的命令來建立設(shè)備節(jié)點(diǎn),如果使用交叉編譯器的話,不需要建立設(shè)備節(jié)點(diǎn)。#mknod/dev/demo c 2540首先要插入驅(qū)動模塊demo.
47、o,然后可以用lsmod命令來查看模塊是否已經(jīng)被插入,在不使用該模塊的時候還可以用rmmod 命令來將模塊卸載。rootzxt demo#insmod demo.oWarning:loading demo.o will taint the kernel:no licenseSee HYPERLINK /lkml/%23export-tainted /lkml/#export-tainted for information about tainted modulesModule demo loaded,with warnings下面使用測試程序來進(jìn)行測試,按照上面步驟成功后會出現(xiàn)下面的結(jié)果:ro
48、otzxt demo#./test demoWrite 32 bytes data to /dev/demo0:0 1 2 31:4 5 6 72:8 9 10 113:12 13 14 154:16 17 18 195:20 21 22 236:24 25 26 277:28 29 30 31Read 32 bytes data from /dev/demo 0:31 30 29 281:27 26 25 242: 23 22 21 113: 12 13 14 154: 16 17 18 195: 20 10 9 86: 7 6 5 47: 3 2 1 0如果模塊沒有成功插入的話,會出現(xiàn)下面
49、的情況:rootzxt demo#./test demo#DEMO device open fail#在驅(qū)動模塊成功插入后,會在/dev下面建立一個叫做demo的設(shè)備文件,我們也可以使用cat命令來直接調(diào)用read函數(shù),來測試讀過程。rootzxt demo# cat/dev/demoDevice open success!一實(shí)驗(yàn)?zāi)康恼莆誈PS通訊原理學(xué)習(xí)NMEA0183 ASCII 接口協(xié)議格式學(xué)習(xí)Linux 下對GPS通訊信息采發(fā)集的編程方法二實(shí)驗(yàn)內(nèi)容學(xué)習(xí)GPS通訊原理,閱讀GPS模塊的產(chǎn)品說明,了解模塊的電氣指標(biāo)、串行接口連接方式、NMEA 語句格式。通過軟件來設(shè)置GPS模塊的波特率、輸
50、出語句和初始化經(jīng)緯度等內(nèi)容。編程實(shí)現(xiàn)對GPS通訊信息的采集方法,將接收到的數(shù)據(jù)進(jìn)行語義的分析,并在LCD 上顯示當(dāng)前的地理位置信息。學(xué)習(xí) Linux GPS 數(shù)據(jù)的解析過程。GPS( Global Positioning System全球定位系統(tǒng))是美國從本世紀(jì)70 年代開始研制,歷時20 年,耗資200 億美元,具有在海、陸、空進(jìn)行全方位實(shí)時三維導(dǎo)航與定位能力的新一代衛(wèi)星導(dǎo)航與定位系統(tǒng)。GPS的主要優(yōu)點(diǎn)包括:( 1)全球、全天候工作:能為用戶提供連續(xù),實(shí)時的三維位置,三維速度和精密時間。不受天氣的影響。( 2)定位精度高:單機(jī)定位精度優(yōu)于10 米, 采用差分定位,精度可達(dá)厘米級和毫米級。(
51、3)功能多,應(yīng)用廣:目前已廣泛的應(yīng)用于大地測量、工程測量、航空攝影測量、運(yùn)載工具導(dǎo)航和管制、地殼運(yùn)動監(jiān)測、工程變形監(jiān)測、資源勘察、地球動力學(xué)等學(xué)科領(lǐng)域。GPS由三個獨(dú)立的部分組成:空間部分:21 顆工作衛(wèi)星,3 顆備用衛(wèi)星。地面支撐系統(tǒng):1 個主控站,3 個注入站,5 個監(jiān)測站。用戶設(shè)備部分:接收GPS衛(wèi)星發(fā)射信號,以獲得必要的導(dǎo)航和定位信息, 經(jīng)數(shù)據(jù)處理,完成導(dǎo)航和定位工作。GPS接收機(jī)硬件一般由主機(jī)、天線和電源組成。GPS定位原理:GPS定位的基本原理是根據(jù)高速運(yùn)動的衛(wèi)星瞬間位置作為已知的起算數(shù)據(jù),采用空間距離后方交會的方法,確定待測點(diǎn)的位置。 如圖所示,假設(shè) t 時刻在地面待測點(diǎn)上安置GPS接收機(jī),可以測定 GPS信號到達(dá)接收機(jī)的時間, 再加上接收機(jī)所接收到的衛(wèi)星星歷等其它數(shù)據(jù)可以確定以下四個方程式:上述四個方程式中待測點(diǎn)坐標(biāo)x、y、 z和Vt0為未知參數(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- plc調(diào)試合同范例
- 個人租賃鋼管合同范例
- 關(guān)于股合同范例
- 購買游戲設(shè)備合同范例
- 酒水采購類合同范例
- 公司與個人合同范例
- 常用購銷標(biāo)準(zhǔn)合同范例
- 青海警官職業(yè)學(xué)院《信息分析與預(yù)測》2023-2024學(xué)年第一學(xué)期期末試卷
- 青海交通職業(yè)技術(shù)學(xué)院《素描(6)A》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024至2030年中國超薄警燈行業(yè)投資前景及策略咨詢研究報告
- 第10章-就業(yè)指導(dǎo)
- 【初中語文】《為你點(diǎn)贊》作文講評課件-2024-2025學(xué)年統(tǒng)編版(2024)語文七年級上冊
- 不做手機(jī)控課件
- 帶式運(yùn)輸機(jī)傳動裝置的設(shè)計(jì)
- 四年級數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)及答案
- 通信工程施工方案
- 信息技術(shù)(第2版)(拓展模塊)教案 拓展模塊5 5.3常用核心技術(shù)3
- 220kV耐張線夾檢測報告
- 儲能系統(tǒng)振動噪聲控制
- GB/T 23473-2024林業(yè)植物及其產(chǎn)品調(diào)運(yùn)檢疫規(guī)程
- 基本公共衛(wèi)生服務(wù)項(xiàng)目績效考核評分細(xì)則
評論
0/150
提交評論