




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、LINUX嵌入式實(shí)驗(yàn)報(bào)告- - TOC o 1-5 h z 目錄 1.實(shí)驗(yàn)一:嵌入式Linux 開(kāi)發(fā)流程2.實(shí)驗(yàn)二:嵌入式Linux 開(kāi)發(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ū)動(dòng)程序設(shè)計(jì)實(shí)驗(yàn) 2.9.實(shí)驗(yàn)八:無(wú)線(xiàn)通信實(shí)驗(yàn)3
2、.3.Linux 開(kāi)發(fā)流程實(shí)驗(yàn)?zāi)康牧私馇度胧絃inux 的開(kāi)發(fā)流程,會(huì)進(jìn)行簡(jiǎn)單的開(kāi)發(fā)。實(shí)驗(yàn)內(nèi)容進(jìn)行 Linux 的開(kāi)發(fā)流程的簡(jiǎn)單介紹。實(shí)驗(yàn)步驟嵌入式 Linux 開(kāi)發(fā),根據(jù)應(yīng)用需求的不同有不同的配置開(kāi)發(fā)方法,但是一般都要經(jīng)過(guò)以下過(guò)程:建立開(kāi)發(fā)環(huán)境,操作系統(tǒng)一般使用REDHAT-LINUX, 版本 7到 9 都可以,選擇定制安裝或全部安裝,通過(guò)網(wǎng)絡(luò)下載相應(yīng)的 GCC 交叉編譯器進(jìn)行安裝(比如arm-linux-gcc 、arm-uclibc-gcc) ,或者安裝產(chǎn)品廠家提供的交叉編譯器。使用 Linux 的 Red Linux 9 的開(kāi)發(fā)界面截圖如下:配置開(kāi)發(fā)主機(jī),配置 MINICOM, 一般參
3、數(shù)為波特率115200,數(shù)據(jù)位 8 位, 停止位 1 , 無(wú)奇偶校驗(yàn),軟硬件控制流設(shè)為無(wú)。在 WINDOWS 下的超級(jí)終端的配置也是這樣,MINICOM軟件的作用是作為調(diào)試嵌入式開(kāi)發(fā)板信息輸出的監(jiān)視器和鍵盤(pán)輸入的工具;配置網(wǎng)絡(luò),只要是配置NFS 網(wǎng)絡(luò)文件系統(tǒng),需要關(guān)閉防火墻,簡(jiǎn)化嵌入式網(wǎng)絡(luò)調(diào)試環(huán)境設(shè)置過(guò)程。系統(tǒng)配置截圖如下:建立引導(dǎo)裝載程序BOOTLOADER, 從網(wǎng)絡(luò)上下載一些公開(kāi)源代碼 的 BOOTLOADER, 如 -BOOT 、 BLOB 、 VIVI 、 LILO 、ARM-BOOT 、 RED-BOOT 等, 根據(jù)自己具體芯片進(jìn)行移植修改。有些芯片沒(méi)有內(nèi)置引導(dǎo)裝載程序,比如三星的A
4、RM7 、 ARM9 系列芯片,這樣就需要編寫(xiě)燒寫(xiě)開(kāi)發(fā)板上的flash 的燒寫(xiě)程序,網(wǎng)絡(luò)上有免費(fèi)下載的WINDOWS 下通過(guò) JTAG 并口簡(jiǎn)易仿真器燒寫(xiě) ARM 外圍 flash 芯片程序。ViVi 運(yùn)行的截圖如下:開(kāi)發(fā)應(yīng)用程序,可以下載到根文件系統(tǒng)中,也可以放在YAFFS、JFFS2文件系統(tǒng)中,有的應(yīng)用程序不使用根文件系統(tǒng),而是直接將應(yīng)用程序和內(nèi)核設(shè)計(jì)在一起,這有點(diǎn)類(lèi)似于UCOS-II 的方式。燒寫(xiě)內(nèi)核,根文件系統(tǒng),應(yīng)用程序,發(fā)布產(chǎn)品。Linux 開(kāi)發(fā)環(huán)境搭建實(shí)驗(yàn)?zāi)康牧私獠⑶艺莆誏inux 的開(kāi)發(fā)環(huán)境搭建方法。實(shí)驗(yàn)內(nèi)容進(jìn)行嵌入式Linux 開(kāi)發(fā)環(huán)境搭建實(shí)驗(yàn)步驟1. REDHAT LINUX
5、 9.0 的安裝PC 上安裝 RedHat LINUX9.0 ,選擇 Custom 定制安裝,在選擇軟件Package時(shí)最好2.7G,如果選擇最后一項(xiàng):everything,即完全安裝,將安裝3張光盤(pán)的全部軟件,需要磁盤(pán)空間大約5G。因此建議提前為REDHAT LINUX 的安裝項(xiàng),5 15G 的空間,具體視用戶(hù)的磁盤(pán)空間大小來(lái)確定,在安裝完Redhat 后還要安裝Linux 的編譯器和開(kāi)發(fā)庫(kù)以及ARM-Linux 的所有源代碼,這些包安裝后的總共需要空間大800M 。Linux 如下;2. 開(kāi)發(fā)工具軟件的安裝安裝環(huán)境搭建如上。3. 開(kāi)發(fā)環(huán)境配置配置網(wǎng)絡(luò),包括配置IP 地址、 NFS 服務(wù)、防
6、火墻。網(wǎng)絡(luò)配置主要是要安裝好以太網(wǎng)卡,對(duì)于一般常見(jiàn)的RTL8139 網(wǎng)卡, READHA T9.0 可以自動(dòng)識(shí)別并自動(dòng)安裝好,完全不要用戶(hù)參與,因此建議使用該網(wǎng)卡。然后配置宿主機(jī)IP 為 21 。如果是在有多臺(tái)計(jì)算機(jī)使用的局域網(wǎng)環(huán)境使用此開(kāi)發(fā)設(shè)備,IP 地址可以根據(jù)具體情況設(shè)置,如圖所示:雙擊設(shè)備eth0 的藍(lán)色區(qū)域,進(jìn)入以太網(wǎng)設(shè)置界面對(duì)于 REDHA T9.0, 它默認(rèn)的是打開(kāi)了防火墻,IP 訪(fǎng)問(wèn)它全部拒絕,即無(wú)法用NFS mount 它, 許多網(wǎng)絡(luò)功能都將無(wú)Minicom 的配置如下:四、實(shí)驗(yàn)總結(jié)通過(guò)本次實(shí)驗(yàn)我學(xué)會(huì)了關(guān)于Linux 配置的一些基本的應(yīng)用,感覺(jué)收獲特別大,這就算入一、實(shí)驗(yàn)?zāi)康?/p>
7、了解在 Linux 環(huán)境下串行程序的基本方法。掌握終端的主要屬性及設(shè)置方法,熟悉終端I/O 函數(shù)的使用。學(xué)習(xí)使用多線(xiàn)程完成串口的收發(fā)處理。二、實(shí)驗(yàn)內(nèi)容讀懂程序源代碼,學(xué)習(xí)終端I/O 函數(shù)的使用方法,學(xué)習(xí)將多線(xiàn)程編程應(yīng)用到串口的接受和發(fā)送程序設(shè)計(jì)中。三、預(yù)備知識(shí)有 C 語(yǔ)言的基礎(chǔ)掌握在 Linux 下常用編輯器的使用。掌握Makefile 的編寫(xiě)和使用。掌握Linux 下的程序編譯與交叉編譯過(guò)程。四、實(shí)驗(yàn)原理異步串行I/O 方式是將傳輸數(shù)據(jù)的每個(gè)字符一位接一位(例如先低位、后高位)地傳送。數(shù)據(jù)的各不同位可以分時(shí)使用同一傳輸通道,因此串行I/O 可以減少信號(hào)連接線(xiàn),最后用一對(duì)線(xiàn)即可進(jìn)行。接收方對(duì)于
8、同一根線(xiàn)上一連串的數(shù)字信號(hào),首先要分割成位,再按位組成字符。為了恢復(fù)發(fā)送的信息,雙方必須協(xié)調(diào)工作。在微型計(jì)算機(jī)中大量使用異步串行I/O 方式, 雙方使用各自的時(shí)鐘信號(hào),而且允許時(shí)鐘頻率有一定誤差,因此實(shí)現(xiàn)較容易。但是由于每個(gè)字符都要獨(dú)立確定起始和結(jié)束(即每個(gè)字符都要重新同步),字符和字符間還可能有長(zhǎng)度不定的空閑時(shí)間,因此效率較低。上圖給出異步串行通信中一個(gè)字符的傳送格式。開(kāi)始前, 線(xiàn)路處于空閑狀態(tài),送出連續(xù)“ 1 ”。傳送開(kāi)始時(shí)首先發(fā)一個(gè)“ 0” 作為起始位,然后出現(xiàn)在通信線(xiàn)上的是字符的二進(jìn)制編碼數(shù)據(jù)。每個(gè)字符的數(shù)據(jù)位長(zhǎng)可以約定為5 位、 6 位、 7 位或 8 位,一般采用ASCII 編碼。
9、后面是奇偶校驗(yàn)位,根據(jù)約定,用奇偶檢驗(yàn)位將所傳字符中“1 ”的位數(shù)湊成奇數(shù)個(gè)數(shù)或偶數(shù)個(gè)數(shù)。也可以也可以約定不要奇偶校驗(yàn)位,這樣就取消奇偶校驗(yàn)位。最后是表示停止位的“1”信號(hào),這個(gè)停止位可以約定持續(xù)1 位、 1.5 位或 2位的時(shí)間寬度。至此一個(gè)字符傳送完畢,線(xiàn)路又進(jìn)入空閑,持續(xù)為 “ 1”。 經(jīng)過(guò)一段隨機(jī)的時(shí)間后,下一個(gè)字符開(kāi)始傳送才有發(fā)出起始位。每一個(gè)數(shù)據(jù)位的寬度等于傳送波特率的倒數(shù)。微機(jī)異步串行通信中,常用的波特率為50.95,110,150,300,600,1200,2400,4800,9600 等。接收方按約定的格式接收數(shù)據(jù),并進(jìn)行檢查,可以查出以下三種錯(cuò)誤:奇偶錯(cuò):在約定奇偶檢查的情
10、況下,接收到的字符奇偶狀態(tài)和約定不符。幀格式錯(cuò):一個(gè)字符從起始位到停止位的總尾數(shù)不對(duì)。溢出錯(cuò):若先接收的字符尚未被微機(jī)讀取,后面的字符又傳送過(guò)來(lái),則產(chǎn)生溢出錯(cuò)。每一種錯(cuò)誤都會(huì)給出相應(yīng)的出錯(cuò)信息,提示用戶(hù)處理。一般串口調(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 開(kāi)發(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 作為終端控制臺(tái),所以可以看到term 發(fā)出的數(shù)據(jù),卻無(wú)法看到開(kāi)發(fā)主機(jī)發(fā)來(lái)的數(shù)據(jù),可以使用另外一
18、臺(tái)主機(jī)連接串口2 進(jìn)行收發(fā)測(cè)試。Ctrl+c 可使程序強(qiáng)行退出。注意:如果在執(zhí)行./term 時(shí)出現(xiàn)下面的錯(cuò)誤,可以通過(guò)我們前文提到的方法建立一個(gè)連接來(lái)解決。/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)境下對(duì)S3C2410 芯片的 8 通道 10 位 A/D 的操作與控制二 實(shí)驗(yàn)內(nèi)容學(xué)習(xí) AD 接口遠(yuǎn)離,了解實(shí)現(xiàn)AD 系統(tǒng)對(duì)于系統(tǒng)的軟件和硬件要求,閱讀ARM 芯片文件,
19、 掌握 ARM 的 AD 相關(guān)寄存器的功能,熟悉 ARM 系統(tǒng)硬件的AD 相關(guān)接口uliyong 外部模擬信號(hào)編程實(shí)現(xiàn)ARM 循環(huán)采集全部前4 路通道,并且在超級(jí)終端上顯示。三 實(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 開(kāi)發(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我們可以通過(guò)調(diào)節(jié)開(kāi)發(fā)板上的三個(gè)黃色的電位器,來(lái)看a0,a1,a2,的變化DA 部分一 實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)DA 轉(zhuǎn)換原理掌握MAX504DA 轉(zhuǎn)換芯片的使用方法掌握不帶有DA 的 CPU 擴(kuò)展 DA 功能的主要方法了解DA 驅(qū)動(dòng)程序加入內(nèi)核的方法二 實(shí)驗(yàn)內(nèi)容學(xué)生DA 接口原理,了解實(shí)現(xiàn)DA 系統(tǒng)對(duì)于系統(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 開(kāi)發(fā)主機(jī)的/arm
23、2410s到 /host目錄然后進(jìn)入/host/exp/05_da/drivers 目錄,用insmod exio.o 命令插入DA 驅(qū)動(dòng),并且用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 后會(huì)出現(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這是由于我們沒(méi)有制定參數(shù)造成的,他的格式為./da_mainda 的 id 號(hào) 數(shù)字 , 我們可以通過(guò)選擇 0 或 1 來(lái)決定輸出到開(kāi)發(fā)板上的哪個(gè)DA 接口,同時(shí)還需要在0.04.
25、096V 之間來(lái)選擇一個(gè)輸出電壓,下面的例子是用了開(kāi)發(fā)板上的DA0 且輸出 1V 的電壓,我們可以使用萬(wàn)用表對(duì)其進(jìn)行測(cè)量。/host/exp/basic/05_ad./da_main0 1CurrentVoltage is 1.000000v四實(shí)驗(yàn)總結(jié)通過(guò)本次實(shí)驗(yàn)我了解到一些關(guān)于DA AD 的相關(guān)知識(shí)。實(shí)驗(yàn)五:圖形界面應(yīng)用程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康牧私庠?Linux 下安裝 Qt以及 Qt/Embedded 的基本步驟;學(xué)會(huì)在 Qt/E 平臺(tái)下使用Virtual framebuffer 顯示程序結(jié)果。二、實(shí)驗(yàn)內(nèi)容 在 Linnux 下編譯和使用Qt/E 平臺(tái);在 Qt/E 平臺(tái)下編譯和運(yùn)行一個(gè)程序使
26、用Virtual framebuffer 顯示運(yùn)行結(jié)果。三、實(shí)驗(yàn)步驟該在 Trolltech 公司的網(wǎng)站上可以下載該公司所提供的Qt/Embedded 的免費(fèi)版本,在安裝產(chǎn)品光盤(pán)以后,本次實(shí)驗(yàn)?zāi)夸浵乱延幸螺d的文件,在/arm2410s/gui/Qt/src 下。在做實(shí)驗(yàn)錢(qián)吧本次實(shí)驗(yàn)用到的三個(gè)文件拷貝到/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/ 打 開(kāi) 文 件 , 將 該 文 件 中 的 PATH 變 亮 改 為PATH=$PATH:$HOME/bin:/arm2410s/gui/Qt/tools/usr/local/arm/3.4.1/bin/,
28、存盤(pán)后退出。rootBC tools#source/root/.bash profile如果要正確安裝的話(huà),在任意路徑下輸入ar 后按Tab 鍵即可列出編譯器文件。Qt/Embedded 平臺(tái)的搭建需要以下幾步: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)時(shí)都要輸入yesmakecp-artbin/uic$QTEDIR/bin/./configure 是對(duì) Qt 進(jìn)行配置,它包括很多選項(xiàng),例如可以通過(guò)添加“-no-opengl”等,如果想要進(jìn)一步了解可以通過(guò)鍵入。/configure help 來(lái)獲得更多的幫助信息。編譯完成后需要將生成的/bin/uic 復(fù)制到¥QTEDIR 下創(chuàng)建的目錄bin,因?yàn)樵陔S后的編譯 Qt/Embedded 的時(shí)候會(huì)用到這個(gè)工具。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 工具用來(lái)生成Vir
32、tual framebuffer, 這是一個(gè)非常有用的工具,它可以模擬在開(kāi)發(fā)板上的顯示情況,如果在Virtual framebuffer 中運(yùn)行沒(méi)有問(wèn)題的話(huà),可以直接通過(guò)交叉編譯在開(kāi)發(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 用來(lái)支持Virtual framebuffer-depths4,8,16,32 支持 4 位, 8位, 16 位, 32 位,的顯示深度,此外還可以添加如-syestem-jpeg 和 -gif 來(lái)提供對(duì)jpeg和 gif 的支持。配置系統(tǒng)同時(shí)還支持對(duì)特定平臺(tái)系統(tǒng)選項(xiàng)的添加,但一般來(lái)講,凡是支持 framebuffer 的 linux 系統(tǒng)都可以使用“l(fā)inux-generic-g+ ”平臺(tái)。詳細(xì)的配置信息可以通過(guò)運(yùn)行./configure help 命令來(lái)查看。第四步,查看運(yùn)行結(jié)果,如果上面各步都能夠成功的
34、編譯通過(guò),下面就可以通過(guò)運(yùn)行Qt/Embedded 自帶的 demo 來(lái)查看結(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ī)上開(kāi)發(fā)Qt 應(yīng)用程序的環(huán)境,下面我們通過(guò)編寫(xiě)一個(gè)“he
35、llo embedded”的程序來(lái)了解Qt 程序設(shè)計(jì)。rootBCqt-2.3.10#cd/root/2410sQt/rootBC2410sQt#mkdir exprootBC2410sQt#cd exprootBC exp#vi hello.cpp使用 VI 編寫(xiě)文件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)在開(kāi)始逐行講解一下每一句的意思,中我了這些以后可以幫助我們更加了解QT 的程序設(shè)計(jì)。第 1 行和第二行包含了兩個(gè)頭文件,這兩個(gè)頭文件中包含qapplication 和 qlabel 類(lèi)的定義。第 5 行創(chuàng)建了一個(gè)qapplication 對(duì)象,用于管理整個(gè)程序的資源,它需要兩個(gè)參數(shù),因?yàn)閝t本身需要一些明林行的參數(shù)。第 6 行創(chuàng)建了一個(gè)用來(lái)顯示hello qt/embedded! 的部件。在 QT 中, 都是一個(gè)可視化的用戶(hù)接口,按鈕,菜單,滾動(dòng)條都是部件的實(shí)例。部件可以包含其他部件,例如,一個(gè)應(yīng)用程序窗口通常是一個(gè)
37、包含QMenuBar,QToolBar,QStatusBar 和其他的部件。在 QLable 含糊中的參數(shù)0 表示,這是一個(gè)窗口而不是嵌入到其他窗口中的部件。第 7 行設(shè)置 hello 部件為程序的主部件,當(dāng)用戶(hù)關(guān)閉主部件后,應(yīng)用程序?qū)?huì)被關(guān)閉。如果沒(méi)有主部件的話(huà),即使用戶(hù)關(guān)閉了程序也會(huì)在后他繼續(xù)運(yùn)行。第 8 行使 hello 部件可視,一百年來(lái)說(shuō)部件被創(chuàng)建后都是被隱藏的,因此可以顯示在前根據(jù)需要來(lái)定制部件,這樣的好處是可以避免部件創(chuàng)建所造成的閃爍。第 9 行把程序的控制權(quán)交還給 Qt,這時(shí)候程序就進(jìn)入就緒模式,可視隨時(shí)被用戶(hù)行為激活,例如點(diǎn)擊鼠標(biāo),敲擊鍵盤(pán)等。下面我們喲啊讓我們的程勛運(yùn)行起來(lái)
38、,首先要讓它能夠在Virtual framebuffer 中顯示出來(lái),然后再通過(guò)交叉編譯在開(kāi)發(fā)板上運(yùn)行。要在本機(jī)的Virtual framebuffer 中顯示結(jié)果,下面幾個(gè)步驟是必須的:生成工程文件(.pro)每一個(gè)qt 程序都對(duì)應(yīng)一個(gè)工程文件,因?yàn)閠make 工具要借此工程生成相應(yīng)makefile 文件。生成工程文件使用progen 工具,他的位置在$tmakedir/bin 下使用 progen 生成工程文件的方法如下:$TMAKEDIR/bin/ 生成的這個(gè) 工程文件是可以被修飾的,可以編輯里面的頭文件,源文件等內(nèi)容。生成 makefile 文件QT 提供生成makefile 文件的工
39、具tmake, 這極大地方便了應(yīng)用程序的開(kāi)發(fā),節(jié)省了大量的時(shí)間,而且還可根據(jù)不同平臺(tái)的需要生成適合于不同平臺(tái)的makefile 文件。在使用 tmake 工具前,必須查看相應(yīng)的環(huán)境便令是否正確,由于我們要編譯在本機(jī)上運(yùn)行的 QT 程序,所以指定的編譯器應(yīng)為“l(fā)inux-x86-g+ ”,在命令行中輸入下面的命令來(lái)檢查環(huán)境變量是否正確:echo$TMAKEPATH 查看返回的結(jié)果的結(jié)尾字符是否是“ /qws/linux-x86-g+ ” ,如果不是的話(huà),需要在命令行中重新設(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 命令檢查無(wú)誤以后,就可以以使用tmake 工具來(lái)生生我們需要的makefile 文件,在命令行中如下命令:$TMAKEDIR/bin/tmake-0Makefile 完成上面的步驟以后就可以在當(dāng)前的目錄中生成一個(gè)makefile 文件,關(guān)于makefigure文件的功能和結(jié)構(gòu)這里就不在做過(guò)多的介紹了,可以參考前面的張杰來(lái)了解makefile 。最后
41、在命令行中輸入“make”命令就可以對(duì)整個(gè)程序驚醒編譯連接了。最后生成一個(gè)二進(jìn)制的可執(zhí)行文件hello。用Virtual framebuffer 顯示效果如下:我們可以通過(guò)對(duì)QLabel*hello QLabel( “ Hello Qt/Embedded! ” ,0)這句話(huà)進(jìn)行修改使我們的QLabel程 序 顯 示 起 來(lái) 更 為 美 觀 , 修 改 如 下 : QLabel*hello ( “ Hello ” ”Qt/Embedded! ” ,0) ;修改后顯示效果如圖所示:通過(guò)本次實(shí)驗(yàn)我學(xué)會(huì)GUI 的基本設(shè)計(jì),收獲頗多。了解Linux 的內(nèi)核與根文件的概念,學(xué)會(huì)他們的燒寫(xiě)。結(jié)合實(shí)驗(yàn)指導(dǎo)書(shū)進(jìn)
42、行內(nèi)核與根文件系統(tǒng)的燒寫(xiě)。燒寫(xiě)Linux 內(nèi)核程序。首先安裝驅(qū)動(dòng)程序,需要進(jìn)行相關(guān)驅(qū)動(dòng)的安裝,點(diǎn)擊添加硬件,如圖所示:選擇下一步,截圖如下:添加 Giveio點(diǎn)擊下一步安裝安裝好了截圖如圖所示:好了之后,需要燒寫(xiě)VIVI使用 CMD 打開(kāi)燒寫(xiě)程序在此后出現(xiàn)的三次要求輸入?yún)?shù),第一次是讓選擇Flash,,選0,然后回車(chē)如圖所示:第二次是選擇jtag 對(duì) flash 的兩種功能,也選0,然后回車(chē),如圖所示:第三次是讓選擇起始地址,選0,然后回車(chē),等待大約3-5 分鐘的燒寫(xiě)時(shí)間,如圖所示:VIVI 燒寫(xiě)完畢后選擇參數(shù)2,退出燒寫(xiě)。如圖所示:至此內(nèi)核燒寫(xiě)完畢四燒寫(xiě)根文件系統(tǒng)在 vivi 狀態(tài)下,輸入燒
43、寫(xiě)根文件的命令為:tftp flash root root.cramfs.如圖所示:至此根文件系統(tǒng)燒寫(xiě)完畢!四 . 實(shí)驗(yàn)總結(jié)通過(guò)本次的實(shí)驗(yàn)我學(xué)會(huì)了Linux 內(nèi)核的燒寫(xiě)和根文件系統(tǒng)的燒寫(xiě),感覺(jué) linux 學(xué)起來(lái)很難,以后會(huì)繼續(xù)努力。實(shí)驗(yàn)七:驅(qū)動(dòng)程序設(shè)計(jì)實(shí)驗(yàn)一實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)在 LINUX 下進(jìn)行驅(qū)動(dòng)設(shè)計(jì)的原理;掌握使用模塊方式進(jìn)行驅(qū)動(dòng)開(kāi)發(fā)調(diào)試的過(guò)程。二實(shí)驗(yàn)內(nèi)容在 PC機(jī)上編寫(xiě)簡(jiǎn)單的虛擬硬件驅(qū)動(dòng)程序并進(jìn)行調(diào)試,實(shí)驗(yàn)驅(qū)動(dòng)的各個(gè)接口函數(shù)的實(shí)現(xiàn),分析并理解驅(qū)動(dòng)與應(yīng)用程序的交互過(guò)程。三實(shí)驗(yàn)步驟Linux 中的驅(qū)動(dòng)設(shè)計(jì)是嵌入式Linux 開(kāi)發(fā)中十分重要的部分,他要求開(kāi)發(fā)者不僅要熟悉Linux 的內(nèi)核機(jī)制、驅(qū)
44、動(dòng)程序與用戶(hù)級(jí)應(yīng)用程序的接口關(guān)系、考慮系統(tǒng)中對(duì)設(shè)備的并發(fā)操作等等,而且還要非常熟悉所開(kāi)發(fā)硬件的工作原理。這對(duì)驅(qū)動(dòng)開(kāi)發(fā)者提出了比較高的要求,這個(gè)實(shí)驗(yàn)主要是給大家進(jìn)入驅(qū)動(dòng)設(shè)計(jì)提供一個(gè)簡(jiǎn)單入門(mén)的實(shí)例,并不需要提供太多與硬件相關(guān)的內(nèi)容,這部分應(yīng)該是通過(guò)仔細(xì)閱讀芯片廠家提供的資料來(lái)解決。驅(qū)動(dòng)程序的作用是應(yīng)用程序與硬件之間的一個(gè)中間軟件層,驅(qū)動(dòng)程序應(yīng)該為應(yīng)用程序展現(xiàn)硬件的所有功能,不應(yīng)該強(qiáng)加其他的約束,對(duì)于硬件使用的權(quán)限和限制應(yīng)該由應(yīng)用程序?qū)涌刂啤5怯袝r(shí)驅(qū)動(dòng)程序的設(shè)計(jì)是跟所開(kāi)發(fā)的項(xiàng)目相關(guān)的,這時(shí)就可能在驅(qū)動(dòng)層加入一些與應(yīng)用相關(guān)的設(shè)計(jì)考慮,主要是因?yàn)樵隍?qū)動(dòng)層的效率比應(yīng)用層高,同時(shí)為了項(xiàng)目的需要可能只強(qiáng)化或
45、優(yōu)化硬件的某個(gè)功能,而弱化或關(guān)閉其他的一些功能;到底需要展現(xiàn)硬件的那些功能全都由開(kāi)發(fā)者根據(jù)需要而定。 驅(qū)動(dòng)程序有時(shí)會(huì)被多個(gè)進(jìn)程同時(shí)使用,這時(shí)我們要考慮如何處理并發(fā)的問(wèn)題,就需要調(diào)用一些內(nèi)核的函數(shù)使用互斥量和鎖等機(jī)制。驅(qū)動(dòng)程序主要需要考慮下面三個(gè)方面:提供盡量多的選項(xiàng)給用戶(hù),提高驅(qū)動(dòng)程序的速度和效率,盡量使驅(qū)動(dòng)程序簡(jiǎn)單,使之易于維護(hù)。Linux 的驅(qū)動(dòng)開(kāi)發(fā)調(diào)試有兩種方法,一種是直接編譯到內(nèi)核,再運(yùn)行新的內(nèi)核來(lái)測(cè)試;二是編譯為模塊的形式,單獨(dú)加載運(yùn)行調(diào)試。第一種方法效率低,但在某些場(chǎng)合是唯一的方法。模塊方式調(diào)試效率很高,它使用insmod工具將編譯的模塊直接插入內(nèi)核,如果出現(xiàn)故障,可以使用rmmo
46、d 從內(nèi)核中卸載模塊。不需要重新啟動(dòng)內(nèi)核,這使驅(qū)動(dòng)調(diào)試效率大大提高。我們的實(shí)驗(yàn)在PC機(jī)和 UP-NETARM2410-S 上都可以運(yùn)行,編譯時(shí)使用不同的編譯器就可以了。.閱讀和理解源代碼進(jìn)入/arm2410s/exp/drivers/demo,使用vi 編輯器或其他編輯器閱讀理解源代碼。.編譯驅(qū)動(dòng)模塊及測(cè)試程序上面介紹了在Makefile 中有兩種編譯方法,可以在本機(jī)上使用gcc也可以使用交叉編譯器進(jìn)行編譯。.測(cè)試驅(qū)動(dòng)程序如果使用gcc編譯的話(huà),需要通過(guò)下面的命令來(lái)建立設(shè)備節(jié)點(diǎn),如果使用交叉編譯器的話(huà),不需要建立設(shè)備節(jié)點(diǎn)。#mknod/dev/demo c 2540首先要插入驅(qū)動(dòng)模塊demo.
47、o,然后可以用lsmod命令來(lái)查看模塊是否已經(jīng)被插入,在不使用該模塊的時(shí)候還可以用rmmod 命令來(lái)將模塊卸載。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下面使用測(cè)試程序來(lái)進(jìn)行測(cè)試,按照上面步驟成功后會(huì)出現(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如果模塊沒(méi)有成功插入的話(huà),會(huì)出現(xiàn)下面
49、的情況:rootzxt demo#./test demo#DEMO device open fail#在驅(qū)動(dòng)模塊成功插入后,會(huì)在/dev下面建立一個(gè)叫做demo的設(shè)備文件,我們也可以使用cat命令來(lái)直接調(diào)用read函數(shù),來(lái)測(cè)試讀過(guò)程。rootzxt demo# cat/dev/demoDevice open success!一實(shí)驗(yàn)?zāi)康恼莆誈PS通訊原理學(xué)習(xí)NMEA0183 ASCII 接口協(xié)議格式學(xué)習(xí)Linux 下對(duì)GPS通訊信息采發(fā)集的編程方法二實(shí)驗(yàn)內(nèi)容學(xué)習(xí)GPS通訊原理,閱讀GPS模塊的產(chǎn)品說(shuō)明,了解模塊的電氣指標(biāo)、串行接口連接方式、NMEA 語(yǔ)句格式。通過(guò)軟件來(lái)設(shè)置GPS模塊的波特率、輸
50、出語(yǔ)句和初始化經(jīng)緯度等內(nèi)容。編程實(shí)現(xiàn)對(duì)GPS通訊信息的采集方法,將接收到的數(shù)據(jù)進(jìn)行語(yǔ)義的分析,并在LCD 上顯示當(dāng)前的地理位置信息。學(xué)習(xí) Linux GPS 數(shù)據(jù)的解析過(guò)程。GPS( Global Positioning System全球定位系統(tǒng))是美國(guó)從本世紀(jì)70 年代開(kāi)始研制,歷時(shí)20 年,耗資200 億美元,具有在海、陸、空進(jìn)行全方位實(shí)時(shí)三維導(dǎo)航與定位能力的新一代衛(wèi)星導(dǎo)航與定位系統(tǒng)。GPS的主要優(yōu)點(diǎn)包括:( 1)全球、全天候工作:能為用戶(hù)提供連續(xù),實(shí)時(shí)的三維位置,三維速度和精密時(shí)間。不受天氣的影響。( 2)定位精度高:?jiǎn)螜C(jī)定位精度優(yōu)于10 米, 采用差分定位,精度可達(dá)厘米級(jí)和毫米級(jí)。(
51、3)功能多,應(yīng)用廣:目前已廣泛的應(yīng)用于大地測(cè)量、工程測(cè)量、航空攝影測(cè)量、運(yùn)載工具導(dǎo)航和管制、地殼運(yùn)動(dòng)監(jiān)測(cè)、工程變形監(jiān)測(cè)、資源勘察、地球動(dòng)力學(xué)等學(xué)科領(lǐng)域。GPS由三個(gè)獨(dú)立的部分組成:空間部分:21 顆工作衛(wèi)星,3 顆備用衛(wèi)星。地面支撐系統(tǒng):1 個(gè)主控站,3 個(gè)注入站,5 個(gè)監(jiān)測(cè)站。用戶(hù)設(shè)備部分:接收GPS衛(wèi)星發(fā)射信號(hào),以獲得必要的導(dǎo)航和定位信息, 經(jīng)數(shù)據(jù)處理,完成導(dǎo)航和定位工作。GPS接收機(jī)硬件一般由主機(jī)、天線(xiàn)和電源組成。GPS定位原理:GPS定位的基本原理是根據(jù)高速運(yùn)動(dòng)的衛(wèi)星瞬間位置作為已知的起算數(shù)據(jù),采用空間距離后方交會(huì)的方法,確定待測(cè)點(diǎn)的位置。 如圖所示,假設(shè) t 時(shí)刻在地面待測(cè)點(diǎn)上安置GPS接收機(jī),可以測(cè)定 GPS信號(hào)到達(dá)接收機(jī)的時(shí)間, 再加上接收機(jī)所接收到的衛(wèi)星星歷等其它數(shù)據(jù)可以確定以下四個(gè)方程式:上述四個(gè)方程式中待測(cè)點(diǎn)坐標(biāo)x、y、 z和Vt0為未知參數(shù),其中
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 在線(xiàn)叉車(chē)考試試題及答案
- 會(huì)計(jì)機(jī)考試題及答案
- aopa考試題及答案
- c1科一考試題及答案
- 醫(yī)美培訓(xùn)試題及答案
- 法學(xué)通論考試題及答案
- 專(zhuān)職隊(duì)員招聘考試試題及答案
- 2025年分子科學(xué)與工程專(zhuān)業(yè)畢業(yè)設(shè)計(jì)開(kāi)題報(bào)告
- 2025年材料科學(xué)與工程專(zhuān)業(yè)畢業(yè)設(shè)計(jì)開(kāi)題報(bào)告
- 2025年浙江社工招聘考試題庫(kù)
- 社區(qū)工作者經(jīng)典備考題庫(kù)(必背300題)
- 標(biāo)準(zhǔn)工程簽證單表格
- 幼兒園繪本故事:《羅伯生氣了》 課件
- 省質(zhì)量獎(jiǎng)-卓越績(jī)效自評(píng)報(bào)告
- 北師大版九年級(jí)物理全一冊(cè)教案(完整版)教學(xué)設(shè)計(jì)含教學(xué)反思
- GB 9706.218-2021 醫(yī)用電氣設(shè)備 第2-18部分:內(nèi)窺鏡設(shè)備的基本安全和基本性能專(zhuān)用要求
- QC∕T 900-1997 汽車(chē)整車(chē)產(chǎn)品質(zhì)量檢驗(yàn)評(píng)定方法
- 石油專(zhuān)業(yè)英語(yǔ)(鉆井)
- 教練技術(shù)一階段講義(共59頁(yè))
- 套扣式模板施工方案碗扣式
- (高清版)外墻外保溫工程技術(shù)標(biāo)準(zhǔn)JGJ144-2019
評(píng)論
0/150
提交評(píng)論