版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、PXA270嵌入式實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng)LINUX實(shí)驗(yàn)報(bào)告本學(xué)期通過(guò)三節(jié)嵌入式實(shí)驗(yàn)課的學(xué)習(xí),對(duì)LINUX系統(tǒng)和嵌入式系統(tǒng)有了一個(gè)大致的了解。期間一共做了十四個(gè)實(shí)驗(yàn),具體實(shí)驗(yàn)內(nèi)容如下:實(shí)驗(yàn)一 建立硬件實(shí)驗(yàn)平臺(tái)本實(shí)驗(yàn)是以后所有實(shí)驗(yàn)的硬件基礎(chǔ),需要正確連接宿主PC機(jī)與PXA270-EP目標(biāo)板,PXA270目標(biāo)板與電源連接,用一根串口線將目標(biāo)板串口0與PC機(jī)后方的串口相連,用一根交叉對(duì)接的網(wǎng)線將宿主PC機(jī)網(wǎng)口與目標(biāo)板網(wǎng)口相連。實(shí)驗(yàn)二 Linux操作系統(tǒng)RedHat 9的安裝按照實(shí)驗(yàn)書(shū)所講的步驟在Linux虛擬機(jī)中正確安裝RedHat 9,這是以后所有實(shí)驗(yàn)的軟件基礎(chǔ)。實(shí)驗(yàn)三 建立主機(jī)軟件開(kāi)發(fā)環(huán)境建立宿主PC機(jī)端的
2、開(kāi)發(fā)環(huán)境,此實(shí)驗(yàn)開(kāi)始需要在RedHat 9中的終端窗口(Terminal)中輸入命令:虛擬機(jī)載入ISO鏡像270EP.iso,登陸RedHat,啟動(dòng)終端窗口,對(duì)cdrom鏡像進(jìn)行掛載(mount /dev/cdrom /mnt/cdrom),用“./install”命令進(jìn)行iso安裝,安裝完成,修改/ect/profile的環(huán)境變量(pathmunge /usr/local/arm-linux-/bin)。實(shí)驗(yàn)四 配置超級(jí)終端 超級(jí)終端作為嵌入式實(shí)驗(yàn)性的終端,監(jiān)視并控制其工作狀態(tài)。串口設(shè)置(每秒位數(shù):115200;位數(shù)據(jù):8;奇偶校驗(yàn):無(wú);停止位:1;數(shù)據(jù)流控制:無(wú);)。實(shí)驗(yàn)五 配置TFTP配
3、置宿主PC機(jī)端的TFTP(簡(jiǎn)單文件傳輸協(xié)議)服務(wù),并開(kāi)通此服務(wù)。登陸RedHat,啟動(dòng)終端窗口,輸入setup,選擇System services,取消ipchains和iptables兩項(xiàng)服務(wù),選中tftp服務(wù),取消防火墻,重啟TFTP服務(wù)(service xinetd restart),設(shè)置PC機(jī)ip地址為00(ifconfig eth0 00 up),使用tftp服務(wù)得到文件zImage。實(shí)驗(yàn)六 配置NFS服務(wù) 配置宿主PC機(jī)端的NFS(網(wǎng)絡(luò)文件系統(tǒng))服務(wù),并開(kāi)通此服務(wù)。登陸RedHat,啟動(dòng)終端窗口,輸入setup,選擇System serv
4、ices,選中nfs服務(wù),保存退出,打開(kāi)/ect/exports文件,在其中加入“/ 0 (rw,insecure,no_root_squash,no_all_squash)”,然后重啟服務(wù)(service nfs restart)。注意:每次啟動(dòng)宿主PC機(jī)上的Linux操作系統(tǒng)時(shí),需要通過(guò)命令ifconfig eth0 00 up重置宿主PC機(jī)的IP地址,并在超級(jí)終端中用命令ifconfig eth0 0給PXA270實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng)設(shè)置IP地址。 以上幾個(gè)實(shí)驗(yàn)算是給以后的實(shí)驗(yàn)配置了軟硬件條件,是以后各個(gè)實(shí)驗(yàn)的基礎(chǔ)。實(shí)驗(yàn)七 Hel
5、loWorld 從此實(shí)驗(yàn)開(kāi)始第一次正面接觸嵌入式Linux的開(kāi)發(fā),第一次編寫(xiě)嵌入式系統(tǒng)的應(yīng)用程序。打開(kāi)宿主PC機(jī)登陸RedHat,打開(kāi)實(shí)驗(yàn)箱連接,root登陸實(shí)驗(yàn)箱,設(shè)置實(shí)驗(yàn)箱ip地址為0(ifconfig eth0 0 up),掛載宿主機(jī)根目錄到實(shí)驗(yàn)板/mnt目錄下,然后進(jìn)入mnt目錄;RedHat中打開(kāi)終端窗口,進(jìn)入home目錄建立文件夾HW,并在其中建立HelloWorld.c文件,vi編輯器編輯它?;綜語(yǔ)言代碼為:#include<stdio.h>Int main()printk(“HelloWorld!n”);return 0
6、;在終端窗口下進(jìn)行交叉編譯arm-linux-gcc o HelloWorld HelloWorld.c ,生成.o目標(biāo)文件,進(jìn)入超級(jí)終端的界面,回到/mnt/home/HW目錄下,編譯HelloWorld(./HelloWorld),看到打印輸出“HelloWorld!”。實(shí)驗(yàn)十二 簡(jiǎn)單設(shè)備驅(qū)動(dòng)程序該實(shí)驗(yàn)需要在宿主PC機(jī)端編輯三個(gè)文件:驅(qū)動(dòng)程序、編譯驅(qū)動(dòng)程序時(shí)用的Makefile、測(cè)試程序。驅(qū)動(dòng)程序pxa270_hello_drv.c如下:#include <linux/config.h>#include <linux/kernel.h>#include <li
7、nux/sched.h>#include <linux/timer.h>#include <linux/init.h>#include <linux/module.h>#include <asm/hardware.h> /程序所需的各種同文件/ HELLO DEVICE MAJOR#define SIMPLE_HELLO_MAJOR96#define OURS_HELLO_DEBUG #define VERSION "PXA2700EP-SIMPLE_HELLO-V1.00-060530"void showversion
8、(void)printk("*");printk("t %s tn",VERSION);printk("*"); /顯示版本/ - READ -/*讀取模塊,用于將指定文件描述符中讀取數(shù)據(jù),file:是文件指針buf:讀取數(shù)據(jù)緩存區(qū)count:請(qǐng)求傳輸?shù)淖止?jié)數(shù)f_ops:文件當(dāng)前偏移量*/ssize_t SIMPLE_HELLO_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)#ifdef OURS_HELLO_DEBUGprintk("S
9、IMPLE_HELLO_read-kernel-n");#endifreturn count;/ - WRITE -/*寫(xiě)模塊,用于向打開(kāi)的文件寫(xiě)數(shù)據(jù),寫(xiě)操作從文件當(dāng)前偏移量開(kāi)始file:是文件指針buf:寫(xiě)入數(shù)據(jù)緩存區(qū)count:請(qǐng)求傳輸?shù)淖止?jié)數(shù)f_ops:文件當(dāng)前偏移量*/ssize_t SIMPLE_HELLO_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops)#ifdef OURS_HELLO_DEBUGprintk("SIMPLE_HELLO_write-kernel
10、-n");#endifreturn count;/ - IOCTL -/*控制IO設(shè)備,設(shè)備驅(qū)動(dòng)程序中對(duì)設(shè)備的I/O通道進(jìn)行管理的函數(shù)inode:設(shè)備節(jié)點(diǎn)flip:打開(kāi)的一個(gè)文件cmd:驅(qū)動(dòng)程序的特殊命令編號(hào)data:接收剩余參數(shù)*/ssize_t SIMPLE_HELLO_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, long data)#ifdef OURS_HELLO_DEBUGprintk("SIMPLE_HELLO_ioctl-kernel-n");#endifret
11、urn 0;/ - OPEN -/*打開(kāi)函數(shù)Inode:打開(kāi)文件所對(duì)應(yīng)的i節(jié)點(diǎn),主要獲取從設(shè)備號(hào)flip:打開(kāi)的一個(gè)文件調(diào)用了宏MOD_INC_USE_COUNT,這個(gè)宏主要用來(lái)增加驅(qū)動(dòng)程序使用計(jì)數(shù)器,避免不正確卸載程序*/ssize_t SIMPLE_HELLO_open (struct inode * inode ,struct file * file)#ifdef OURS_HELLO_DEBUGprintk("SIMPLE_HELLO_open-kernel-n");#endifMOD_INC_USE_COUNT;return 0;/ - RELEASE/CLOSE
12、 -/*關(guān)閉函數(shù)Inode:打開(kāi)文件所對(duì)應(yīng)的i節(jié)點(diǎn),主要獲取從設(shè)備號(hào)flip:打開(kāi)的一個(gè)文件調(diào)用了宏MOD_DEC_INC_USE_COUNT,這個(gè)宏主要用來(lái)減少驅(qū)動(dòng)程序使用計(jì)數(shù)器*/ssize_t SIMPLE_HELLO_release (struct inode * inode ,struct file * file)#ifdef OURS_HELLO_DEBUGprintk("SIMPLE_HELLO_release-kernel-n");#endifMOD_DEC_INC_USE_COUNT;return 0;/ -/*SIMPLE_HELLO設(shè)備向系統(tǒng)注冊(cè)*/s
13、truct file_operations HELLO_ops =open:SIMPLE_HELLO_open,read:SIMPLE_HELLO_read,write:SIMPLE_HELLO_write,ioctl:SIMPLE_HELLO_ioctl,release:SIMPLE_HELLO_release,;/ - INIT -/*驅(qū)動(dòng)程序初始化devfs_register_chrdev(SIMPLE_HELLO_MAJOR,"hello_serial_ctl",& HELLO_ops) 為最主要的語(yǔ)句,devfs_register_chrdev注冊(cè)設(shè)備驅(qū)動(dòng)
14、程序,包括主設(shè)備號(hào)、驅(qū)動(dòng)程序名、結(jié)構(gòu)體指針*/static int _init HW_ HELLO_init(void)int ret = -ENODEV;ret = devfs_register_chrdev(SIMPLE_HELLO_MAJOR, "hello_serial_ctl",& HELLO_ops);showversion();if(ret<0)printk("pxa270 init_module failed with %d n-kernel-",ret);elseprintk("pxa270 hello_driv
15、er register success!-kernel-n");return ret; /*模塊初始化函數(shù),調(diào)用HW_ HELLO_init 函數(shù)*/static int _init pxa270_ HELLO_init(void) int ret = -ENODEV;#ifdef OURS_HELLO_DEBUGprintk("pxa270_ HELLO_init-kernel-n");#endif ret = HW_ HELLO_init(); if (ret) return ret; return 0;/*模塊卸載函數(shù) devfs_unregister_ch
16、rdev(SIMPLE_HELLO_MAJOR,"hello _ctl") 為最主要的語(yǔ)句,devfs_unregister_chrdev卸載設(shè)備驅(qū)動(dòng)程序,包括主設(shè)備號(hào)、驅(qū)動(dòng)程序名*/static void _exit cleanup_ HELLO_ctl(void)#ifdef OURS_HELLO_DEBUGprintk("cleanup_HELLO_ctl-kernel-n");#endifdevfs_unregister_chrdev (SIMPLE_HELLO_MAJOR, "hello_ctl" );/*/MODULE_D
17、ESCRIPTION("simple hello driver module");/一些描述信息MODULE_AUTHOR("liduo");/驅(qū)動(dòng)作者M(jìn)ODULE_LICENSE("GPL");module_init(pxa270_HELLO_init);/指定驅(qū)動(dòng)程序初始化函數(shù)module_exit(cleanup _HELLO_ctl);/指定驅(qū)動(dòng)程序卸載函數(shù)編譯程序Makefile如下:#TOPDIR := $(shell cd .; pwd)TOPDIR := .KERNELDIR = /pxa270_linux/linux
18、INCLUDEDIR = $(KERNELDIR)/includeCROSS_COMPILE=arm-linux-AS =$(CROSS_COMPILE)asLD =$(CROSS_COMPILE)ldCC =$(CROSS_COMPILE)gccCPP =$(CC) -EAR =$(CROSS_COMPILE)arNM =$(CROSS_COMPILE)nmSTRIP =$(CROSS_COMPILE)stripOBJCOPY =$(CROSS_COMPILE)objcopyOBJDUMP =$(CROSS_COMPILE)objdumpCFLAGS += -I.CFLAGS += -Wal
19、l -O -D_KERNEL_ -DMODULE -I$(INCLUDEDIR)TARGET = pxa270_hello_drv.omodules: $(TARGET)all: $(TARGET)pxa270_hello_drv.o:pxa270_hello_drv.c$(CC) -c $(CFLAGS) $ -o $install:install -d $(INSTALLDIR)install -c $(TARGET).o $(INSTALLDIR)clean:rm -f *.o * core .dependMake工程管理器讀入Makefile文件的內(nèi)容執(zhí)行編譯工作,一個(gè)Makefile
20、文件包括:(1)由make工具創(chuàng)建的目標(biāo)體(target),通常是目標(biāo)文件或可執(zhí)行文件;(2)要?jiǎng)?chuàng)建目標(biāo)體所依賴的文件(dependency_file);(3)創(chuàng)建每個(gè)目標(biāo)需要運(yùn)行的命令(command)以上兩個(gè)文件編輯后,然后make modules編譯驅(qū)動(dòng)程序,編寫(xiě)測(cè)試文件simple_test_driver.c,然后GCC編輯器編譯測(cè)試程序生成test測(cè)試文件,進(jìn)入超級(jí)終端開(kāi)始掛載,加載驅(qū)動(dòng)程序,./test測(cè)試,實(shí)驗(yàn)完成。 通過(guò)本實(shí)驗(yàn),初步認(rèn)識(shí)了嵌入式系統(tǒng)程序的語(yǔ)法特點(diǎn)以及要運(yùn)行所需的各種條件,學(xué)習(xí)了Linux驅(qū)動(dòng)程序構(gòu)架以及在應(yīng)用程序中如何調(diào)用程序,為以后的實(shí)驗(yàn)打下了基礎(chǔ)。實(shí)驗(yàn)十三
21、CPU GPIO驅(qū)動(dòng)程序設(shè)計(jì)該實(shí)驗(yàn)與實(shí)驗(yàn)十二實(shí)驗(yàn)步驟基本相同,程序略有不同:/ -IOCTL-switch (cmd)case LED_ON : GPCR3 |= 0x1;break;/如果cmd=LED_ON,那么GPCR3置為1case LED_OFF: GPSR3 |= 0x1;break;/如果cmd=LED_OFF,那么GPSR3置為1 default : printk ("lcd control : no cmd run -kernel- n"); return (-EINVAL); / -INIT-GPDR3 |= 0x00000001; /設(shè)置GPIO96輸
22、出模式:開(kāi)燈GPSR3 |= 0x00000001; / 關(guān)燈實(shí)驗(yàn)現(xiàn)象是目標(biāo)板的核心板上的LED閃爍。通過(guò)本實(shí)驗(yàn),編寫(xiě)了針對(duì)實(shí)際硬件的驅(qū)動(dòng)程序,是自己對(duì)嵌入式程序有了一個(gè)更直觀的理解,進(jìn)一步了解了驅(qū)動(dòng)構(gòu)架。實(shí)驗(yàn)十四 中斷實(shí)驗(yàn)該實(shí)驗(yàn)與之前兩個(gè)實(shí)驗(yàn)步驟基本相同,程序略有不同:/ -INIT -ret = request_irq(SIMPLE_INT_IRQ, &SIMPLE_INT_interrupt, SA_INTERRUPT, "int_ctl", NULL);解釋:request_irq申請(qǐng)硬件中斷,參數(shù)包括申請(qǐng)的硬件中斷號(hào)、設(shè)備id、中斷處理的一些屬性(SA_I
23、NTERRUPT是快速處理程序,調(diào)用時(shí)屏蔽所有中斷)等/-卸載-free_irq(SIMPLE_INT_IRQ,NULL);解釋:對(duì)應(yīng)request_irq釋放中斷實(shí)驗(yàn)現(xiàn)象是每當(dāng)按下目標(biāo)板上的SW2 鍵時(shí)就會(huì)觸發(fā)中斷,并且打印相應(yīng)的響應(yīng)信息。實(shí)驗(yàn)十五 數(shù)碼管顯示驅(qū)動(dòng)實(shí)驗(yàn) 不同之處:/-WRITE-void write_bit(int data)GPCR2 |= (0x1 << 27);if(data & 0x80) = 0x80)GPSR2 |= (0x1 << 26);elseGPCR2 |= (0x1 << 26);GPSR2 |= (0x1 &
24、lt;< 27);void write_byte(int data)int i; for(i=0;i<8;i+) write_bit( data << i ); /-gpio INIT-printk("GPDR2 = %xn",GPDR2);GPDR2 = GPDR2 | (0x3<<26);printk("GPDR2 = %xn",GPDR2);通過(guò)本實(shí)驗(yàn),學(xué)習(xí)了串并轉(zhuǎn)換的相關(guān)知識(shí),并編寫(xiě)了驅(qū)動(dòng)程序,對(duì)嵌入式系統(tǒng)可實(shí)現(xiàn)的功能有了更深入的了解。實(shí)驗(yàn)十六 LED點(diǎn)陣驅(qū)動(dòng)程序設(shè)計(jì)/-WRITE-int tmp_buf;/
25、-tmp_buf = buf1;tmp_buf = tmp_buf<<8;tmp_buf = tmp_buf | buf0;#ifdef OURS_LED_DEBUGprintk("tmp = %xn",tmp_buf);#endifoutw(tmp_buf,ioremap_addr);/-CLOSE-outw(0x0000,ioremap_addr); / close the led ary, all led off/-INIT-ioremap_addr=ioremap(0x0800c000,0x0f); / outw(0x00ff,ioremap_addr); / open led ary, all led on/-程序卸載-outw(0x0000,ioremap_addr);本實(shí)驗(yàn)編寫(xiě)了一個(gè)針對(duì)總線操作的硬件驅(qū)動(dòng)程序。實(shí)驗(yàn)十七 AD驅(qū)動(dòng)實(shí)驗(yàn)struct ucb1x00 *ad
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度藥店?duì)I業(yè)員藥品不良反應(yīng)監(jiān)測(cè)與報(bào)告合同
- 2025年度環(huán)保型除塵器租賃合同模板4篇
- 2025年度南京市租賃合同簽訂及履行流程范本4篇
- 2025年度門(mén)窗行業(yè)品牌推廣與廣告投放合同4篇
- 2025年度代付款保險(xiǎn)產(chǎn)品銷(xiāo)售合同4篇
- 2025年度民辦學(xué)校教師心理健康教育與輔導(dǎo)合同4篇
- 2025年度個(gè)人房屋抵押貸款合同書(shū)(智慧風(fēng)險(xiǎn)管理)3篇
- 2025年度農(nóng)業(yè)科技研發(fā)成果轉(zhuǎn)讓合同范本3篇
- 2025年度生態(tài)農(nóng)業(yè)示范區(qū)-太陽(yáng)能灌溉系統(tǒng)安裝與培訓(xùn)合同4篇
- 二零二五版民營(yíng)企業(yè)員工股權(quán)激勵(lì)實(shí)施合同模板4篇
- 垃圾處理廠工程施工組織設(shè)計(jì)
- 天皰瘡患者護(hù)理
- 2025年蛇年新年金蛇賀歲金蛇狂舞春添彩玉樹(shù)臨風(fēng)福滿門(mén)模板
- 《建筑制圖及陰影透視(第2版)》課件 4-直線的投影
- 2024-2030年中國(guó)IVD(體外診斷)測(cè)試行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 損失補(bǔ)償申請(qǐng)書(shū)范文
- 壓力與浮力的原理解析
- 鐵路損傷圖譜PDF
- 裝修家庭風(fēng)水學(xué)入門(mén)基礎(chǔ)
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)任務(wù)二 社群的種類與維護(hù)
- 《詩(shī)詞寫(xiě)作常識(shí) 詩(shī)詞中國(guó)普及讀物 》讀書(shū)筆記思維導(dǎo)圖
評(píng)論
0/150
提交評(píng)論