嵌入式系統(tǒng)實驗報告(華中科技大學).doc_第1頁
嵌入式系統(tǒng)實驗報告(華中科技大學).doc_第2頁
嵌入式系統(tǒng)實驗報告(華中科技大學).doc_第3頁
嵌入式系統(tǒng)實驗報告(華中科技大學).doc_第4頁
嵌入式系統(tǒng)實驗報告(華中科技大學).doc_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

課 程 實 驗 報 告實驗名稱:嵌入式系統(tǒng)實驗專業(yè)班級:計算機科學與技術x班學 號: Ux 姓 名: x 合 作 者: x 實驗時間: xxxx年xx月xx日 計算機科學與技術學院試驗一:bootloader (ads、引導)一、實驗任務1、熟悉ADS 1.2開發(fā)工具創(chuàng)建、編譯、下載、調試工程2、串口通訊串口控制器初始化、收/發(fā)數(shù)據(jù)3、配置主機端的nfs服務器配置主機端的nfs服務器,以連接linux核心4、下載并運行l(wèi)inux核心使用自己的串口程序下載并運行l(wèi)inux核心二、實驗內容編寫串口接收數(shù)據(jù)函數(shù)編寫串口發(fā)送數(shù)據(jù)函數(shù)學習ads、jtag調試、flash燒寫打印菜單,等待用戶輸入下載并運行l(wèi)inux核心配置主機的nfs服務器,與linux核心連接三、實驗步驟1.編寫串口接收數(shù)據(jù)函數(shù)編寫串口發(fā)送數(shù)據(jù)函數(shù)修改bootloader:菜單、串口收發(fā)、命令行;接收串口數(shù)據(jù)并做相應處理:while(1) 打印菜單并等待用戶輸入; switch(ch)/根據(jù)用戶輸入做相應處理 case 1: imgsize=xmodem_receive(char *)KERNEL_BASE, MAX_KERNEL_SIZE); if(imgsize=0)/下載出錯; else/下載成功; break; case 3: nand_read(unsigned char *)KERNEL_BASE, 0x00030000, 4*1024*1024); case 2: BootKernel(); /這里是不會返回的,否則出錯; break; default: break; Bootloader的main()函數(shù)打印菜單:int main(void)ARMTargetInit(); /目標板初始化;/接收用戶命令,傳遞linux核心; Uart_puts(Menu:nr);Uart_puts(1.Load kernel via Xmodem;nr);Uart_puts(2.Boot linux; nr);Uart_puts(3.Load kernel from flash and boot; nr);Uart_puts(Make your choice.nr);doch=Uart_getc();while(ch!=1 & ch!=2 & ch!=3); return 0;串口讀寫:void Uart_putc(char c)while(!SERIAL_WRITE_READY(); (UTXH0) = (c); unsigned char Uart_getc( ) while(!SERIAL_CHAR_READY();return URXH0; 2.使用ads1.2編譯bootloader;3.使用uarmjtag下載、調試bootloader;4.使用axd查看變量、內存,單步跟蹤; 5.配置超級終端,與bootloader通訊;6.配置nfs; 編輯/etc/export文件:/home/arm_os/filesystem/rootfs 目標板ip(rw,sync)/home/arm_os/filesystem/rootfs 主機ip(rw,sync)啟動nfs服務器:/etc/init.d/nfs restart測試nfs服務器是否正常運行:mount 主機ip:/home/arm_os/filesystem/rootfs /mnt 7.以root用戶啟動cutecom,將cutecom配置改為115200 bps,8位,1位停止位,無校驗,xmodem,no line end;8.使用bootloader重新下載Linux核心映像,啟動核心運行后,察看是否成功加載nfs上的root文件系統(tǒng);9.啟動Linux核心運行,察看結果;10.linux核心能夠運行到加載root步驟,說明bootloader正常運行;11.將bootloader燒寫到flash中,重啟目標板電源,察看bootloader是否燒寫正常,下載核心測試;目標板linux系統(tǒng)正常運行到命令行模式下,能夠正常輸入linux命令,說明實驗成功。 四、實驗過程中遇到的問題及解決方案問題一 :打開dubug,下載zImage失敗,調試時發(fā)現(xiàn)下載失敗原因是發(fā)生錯誤程序寫為無限循環(huán)。解決方法:重新做了很多遍,仍然失敗,最終發(fā)現(xiàn)同樣的bootloader初始化及同樣的下載操作在別的機器中能夠正常運行,最終換了試驗臺終于成功地下載了核心映像。問題二 :實驗中雖然下載完成,但是在cutecom中并沒有顯示成功下載映像,沒有出現(xiàn)#號不能進入命令行模式,不能夠進行后續(xù)的操作。解決方法: 因為不明白錯誤出現(xiàn)的原因,向老師提出疑問,經(jīng)老師指點,發(fā)現(xiàn)linux系統(tǒng)中網(wǎng)絡連接處沒有網(wǎng)絡連接,通過重新配置了ip地址,最終成功下載了核心映像。試驗二:linux kernel (gcc、make)一、實驗任務1、熟悉基本的linux命令文件操作、文件編輯串口工具、程序開發(fā)2、配置linux核心make menuconfig 3、 交叉編譯linux核心make zImage 二、實驗內容熟悉基本的linux命令配置linux核心交叉編譯linux核心調試自己編譯的核心掛載nfs上的root(根目錄)編寫一個小程序在目標板上運行三、實驗步驟1.登陸linux系統(tǒng),在終端進入管理員模式;2.解壓縮源碼包到/home/下; 3.察看解壓縮后的/home/arm_os目錄:Linux核心、編譯器、rootfs等;4.配置并測試nfs;5.配置cutecom:115200,XModem,No line end;6.配置核心:make menuconfig;7.編譯核心:make;8.下載并運行核心,加載root文件系統(tǒng);9.重新設置cutecom為LF line end;熟悉基本的Linux命令;10.編寫一個小程序hello.c在目標板上運行,察看結果。#includeInt main()Printf(“hello”);Return 0;四、實驗中遇到的主要問題及解決方法問題1:寫成的hello.c程序用gcc編譯之后不能在目標板上運行。解決方法:通過請教老師才知道編譯的命令不對,此實驗板需要通過用arm-gcc-linux進行交叉編譯,而不是用gcc,得到的可執(zhí)行文件可以用命令./hello成功運行。試驗三:linux driver (uart)一、實驗任務1、 Linux驅動編程基本接口常用函數(shù)2、 串口驅動申請中斷處理串口數(shù)據(jù)讀、寫二、實驗內容編寫串口驅動初始化、釋放函數(shù);編寫串口驅動接收數(shù)據(jù)函數(shù);編寫串口驅動發(fā)送數(shù)據(jù)函數(shù);編寫串口驅動中斷處理函數(shù);編寫串口訪問應用程序; 使用模塊方式編譯驅動;使用模塊方式調試驅動;實現(xiàn)基本的串口數(shù)據(jù)收發(fā)。 三、實驗步驟1編寫初始化、釋放函數(shù):uart_init、uart_exit、uart_open、uart_ release分別實現(xiàn)串口設備初始化、釋放、打開、關閉串口設備初始化函數(shù):int ret;dev_t devno = MKDEV(uart_major, 0);if(uart_major) ret = register_chrdev_region(devno, 1, uart);else ret = alloc_chrdev_region(&devno, 0, 1, uart);uart_major = MAJOR(devno);if(ret = UART_SIZE) return -EIO;if(*ppos + size UART_SIZE)size = UART_SIZE - *ppos;dochar c;if(!loop_buffer_del(&readb, &c)copy_to_user(buf+i, &c, 1);i+;elseschedule_timeout(10); while(i = UART_SIZE)return -EIO;if(*ppos + size UART_SIZE) size = UART_SIZE - *ppos;copy_from_user(wmem, buf, size); for(i=0; isize; i+)while(!(_raw_readl(uart + S3C2410_UTRSTAT) & 0x4);_raw_writel(*(wmem + i), uart + S3C2410_UTXH);return size;串口訪問應用程序:#include #include int main() int uart_fd, i;char c; uart_fd = open(/dev/uart, O_RDWR); if(uart_fd 0) printf(Open device error!n);return -1; for(i=0; i50; i+) read(uart_fd, &c, 1); printf(%c, c); write(uart_fd, &c, 1); if(c = q)break; close(uart_fd); return 0; 3.用模塊方式編譯Linux核心,生成uart.ko,啟動目標板Linux核心,用insmod、rmmod等命令操作模塊;用printk打印調試串口驅動,包括中斷相應,讀寫等;4.編寫應用程序:uart.c,實現(xiàn)打開串口設備、讀寫等,把主機端由cutecom發(fā)過來的串口數(shù)據(jù)回傳給主機;5.將目標板上串口線連到串口1;6.編譯應用程序uart.c,實現(xiàn)和主機間的串口通訊。 四、實驗中遇到的問題及解決方法問題1:由于模塊化編譯方法不太了解,對其過程不清楚。解決方法:向老師提出疑問后才知道首先修改uart.c中的波特率,然后拷貝驅動:/home/arm_os/test/st/test3/driver/下的makefile和uart.c拷貝到:/home/arm_os/kernel/linux-2.6.29.8/driver/char下,再拷貝應用程序:把:/home/arm_os/test/st/tesT3/下的makefile和uart.c拷貝到自己的文件夾,用于測試。問題2:前面步驟都照常執(zhí)行但是發(fā)送接收始終不能夠成功。解決方法:通過問老師仍然查不出錯誤,于是換了試驗臺再次嘗試后能夠成功,同樣是實驗臺的問題。試驗四:linux driver (touchscreen)一、實驗任務1、 觸摸屏驅動初始化坐標值2、 觸摸屏、圖形系統(tǒng)協(xié)調工作觸摸屏校準撥號鍵盤二、實驗內容l 編寫觸摸屏驅動初始化、釋放函數(shù);l 編寫觸摸屏驅動讀取數(shù)據(jù)函數(shù);l 編寫觸摸屏驅動中斷處理函數(shù);l 使用模塊方式調試驅動;l 編寫觸摸屏讀取應用程序; l 編寫簡單圖形系統(tǒng)繪制應用程序,繪制一個數(shù)字鍵盤;l 實現(xiàn)基本的觸摸鍵盤程序。 三、實驗步驟1.填寫函數(shù):ts_init、ts_exit、ts_open、ts_ release,實現(xiàn)觸摸屏設備初始化、釋放、打開、關閉;觸摸屏設備初始化函數(shù):int ret;dev_t devno = MKDEV(ts_major, 0);if(ts_major) ret = register_chrdev_region(devno, 1, “ts_ads7843);else ret = alloc_chrdev_region(&devno, 0, 1, ts_ads7843 );ts_major = MAJOR(devno);if(ret 0)printk(Register chrdev region failed!n);return ret; cdev_init(&ts_cdev, &ts_fops);ret = cdev_add(&ts_cdev, devno, 1);if(ret)printk(Add c device failed!n);return ret; spi0_base = ioremap(S3C2410_PA_SPI,0x20);device_init();init_waitqueue_head(&wq);ret = request_irq(IRQ_EINT5, ts_isr, IRQF_DISABLED, ts_ads7843, NULL);if(ret)printk(Request irq failed!n); return ret; TS_OPEN_INT();ts_time = jiffies;printk(Ts_ads7843 module init.n);return 0;觸摸屏設備釋放函數(shù):free_irq(IRQ_EINT5, NULL); cdev_del(&ts_cdev);unregister_chrdev_region(MKDEV(ts_major,0),1);printk(Ts_ads7843 module exit.n);2.填寫函數(shù):ts_isr、ts_read,實現(xiàn)觸摸屏讀、中斷處理觸摸屏設備中斷處理函數(shù):if(jiffies = sizeof(struct ts_ret)interruptible_sleep_on(&wq);ts_ret.x = x;ts_ret.y = y;ts_ret.pressure = PEN_DOWN;copy_to_user(buffer, (char *)&ts_ret, sizeof(struct ts_ret); count -= sizeof(struct ts_ret);size += sizeof(struct ts_ret); return size;3.用模塊方式編譯Linux核心,生成ts_ads7843.ko,啟動目標板Linux核心,用insmod、rmmod等操作模塊;4.用printk打印調試觸摸屏驅動,包括中斷相應,讀等;5.編寫應用程序:ts_ads7843.c,實現(xiàn)打開觸摸屏設備、讀等;觸摸屏訪問應用程序:#include #include int main() int ts_fd, i;char c;struct ts_ret ts_ret;ts_fd = open(/dev/ts_ads7843, O_RDWR);if(ts_fd 0)printf(Open ts device error!n);return -1;for(i=0; i50; i+) if(read(ts_fd, &ts_ret, sizeof(struct ts_ret) if(ts_ret.x Xmax) ts_ret.x = Xmax;if(ts_ret.y Ymax) ts_ret.y = Ymax; x = (ts_ret.x-Xmin) * SCREEN_WIDTH/(Xmax-Xmin); y = (ts_ret.y-Ymin) * SCREEN_HEIGHT/(Ymax-Ymin); close(ts_fd); return 0; 6.觸摸屏校準通過多次點擊觸摸屏四個邊界點得到幾組坐標,取平均值來得到屏幕Xmin,Xmax,Ymin,Ymax,在ts_ads7843.c 修改程序,將這四個值代入函數(shù)中,并將SCREEN_WIDTH,SCREEN_HEIGHT設置為640*480,修改后的ts_ads7843.c程序如下:#include #include #define Xmin 500#define Xmax 2200#define Ymin 1400#define Ymax 3000static struct ts_ret unsigned int pressure;unsigned int x;unsigned int y; ts_ret;int main() int x,y; int ts_fd, i; char c; struct ts_ret ts_ret; ts_fd = open(/dev/ts_ads7843, O_RDWR); if(ts_fd 0) printf(Open ts device error!n); return -1; for(i=0; i50; i+) if(read(ts_fd, &ts_ret, sizeof(struct ts_ret) if(ts_ret.x Xmax) ts_ret.x = Xmax; if(ts_ret.y Ymax) ts_ret.y = Ymax; x = (ts_ret.x-Xmin) * 640/(Xmax-Xmin); y = (ts_ret.y-Ymin) * 480/(Ymax-Ymin); printf(%d,%d,%dn,x,y,ts_ret.pressure); close(ts_fd); return 0;實驗五、六: (framebuffer)GPRS綜合試驗一、實驗任務1、 GPRS模塊控制試驗串口控制GPRS模塊AT命令集2、 綜合實驗電話撥號短消息發(fā)送二、實驗內容編寫簡單圖形系統(tǒng)繪制應用程序,繪制一個數(shù)字鍵盤;實現(xiàn)基本的觸摸鍵盤程序。編寫應用程序實現(xiàn)撥號,發(fā)短信功能。 三、實驗步

溫馨提示

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

最新文檔

評論

0/150

提交評論