freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

北郵電子院嵌入式實(shí)驗(yàn)報(bào)告大四上(已修改)

2024-10-23 04:10 本頁(yè)面
 

【正文】 第一篇:北郵電子院嵌入式實(shí)驗(yàn)報(bào)告大四上嵌入式實(shí)驗(yàn)報(bào)告學(xué)院: 電子工程學(xué)院一、實(shí)驗(yàn)?zāi)康牧私馇度胧较到y(tǒng)及其相關(guān)基礎(chǔ)知識(shí)。了解宿主PC機(jī)與PXA270目標(biāo)版,能正確連接宿主PC機(jī)與PXA270目標(biāo)版。學(xué)會(huì)在宿主機(jī)上安裝Linux操作系統(tǒng)——。、學(xué)會(huì)建立宿主PC機(jī)端的開發(fā)環(huán)境。學(xué)會(huì)配置宿主PC機(jī)端的超級(jí)終端。配置宿主PC機(jī)端的TFTP服務(wù),并開通此服務(wù)。配置宿主PC機(jī)端的NFS服務(wù),并開通此服務(wù)。學(xué)會(huì)簡(jiǎn)單Linux驅(qū)動(dòng)程序的設(shè)計(jì)。二、實(shí)驗(yàn)內(nèi)容(一)基本實(shí)驗(yàn)實(shí)驗(yàn)一到六為基礎(chǔ)實(shí)驗(yàn),主要是為了在熟悉實(shí)驗(yàn)操作平臺(tái)的同時(shí)為后續(xù)實(shí)驗(yàn)搭建好軟、硬件環(huán)境,配置好相關(guān)的協(xié)議、服務(wù)。其中實(shí)驗(yàn)一是各個(gè)硬件的互聯(lián),搭建好了實(shí)驗(yàn)的硬件環(huán)境。實(shí)驗(yàn)二是在宿主PC端安裝虛擬機(jī),提供了實(shí)驗(yàn)需要的Linux操作系統(tǒng)。實(shí)驗(yàn)三是宿主PC端開發(fā)環(huán)境的安裝與配置。實(shí)驗(yàn)四是配置宿主PC機(jī)端的超級(jí)終端,使PC機(jī)與PXA270目標(biāo)板之間可以通過(guò)串口通訊。在每次重啟宿主PC機(jī)時(shí),都需要重新將超級(jí)終端掛載到虛擬機(jī)上,掛載之前須通過(guò)ifconfig命令查看該機(jī)的IP地址,若其已經(jīng)復(fù)位,須用命令:ifconfig eth0 up重置宿主PC機(jī)的IP地址。掛載虛擬機(jī)的代碼為:root ifconfig eth0 up mount –o nolock :/ /mnt 實(shí)驗(yàn)五是配置宿主PC機(jī)的TFTP服務(wù)。TFTP是簡(jiǎn)單文件傳輸協(xié)議。每次重啟宿主PC機(jī)時(shí),都要重啟該服務(wù),重啟命令為:service xinetd restart。實(shí)驗(yàn)六是配置宿主PC機(jī)端NFS服務(wù)。NFS是指網(wǎng)絡(luò)文件系統(tǒng),它實(shí)現(xiàn)了文件在不同的系統(tǒng)間使用。當(dāng)使用者想用遠(yuǎn)端檔案時(shí),只需調(diào)用“mount”就可以遠(yuǎn)端系統(tǒng)掛接在自己的檔案系統(tǒng)之下。每次重啟宿主PC機(jī)時(shí),也都要重啟該服務(wù),重啟命令為: service nfs restart service nfs restart(二)基本接口實(shí)驗(yàn)實(shí)驗(yàn)十二、簡(jiǎn)單設(shè)備驅(qū)動(dòng)程序本次實(shí)驗(yàn)的目的是讓我們動(dòng)手實(shí)踐一個(gè)簡(jiǎn)單的字符型設(shè)備驅(qū)動(dòng)程序,學(xué)習(xí)Linux驅(qū)動(dòng)程序構(gòu)架,學(xué)習(xí)在應(yīng)用程序中調(diào)用驅(qū)動(dòng)。驅(qū)動(dòng)程序代碼及注釋為: // 頭文件include include include include include include include define SIMPLE_HELLO_MAJOR 96 // 定義主設(shè)備號(hào)HELLO DEVICE MAJOR define OURS_HELLO_DEBUG // 定義標(biāo)識(shí)符define VERSION “” // 定義版本號(hào) void showversion(void)//顯示版本的函數(shù) { 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)前偏移量當(dāng)讀取標(biāo)識(shí)符OURS_HELLO_DEBUG時(shí),打印信息,然后返回count*/ ssize_t SIMPLE_HELLO_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ ifdef OURS_HELLO_DEBUGprintk(“SIMPLE_HELLO_read[kernel]n”)。endif return count。}/*write:用于向打開的文件寫數(shù)據(jù) file:是文件指針 buf:寫入數(shù)據(jù)緩存區(qū) count:求傳輸?shù)淖止?jié)數(shù) f_ops:文件當(dāng)前偏移量當(dāng)讀取標(biāo)識(shí)符OURS_HELLO_DEBUG時(shí),打印信息,然后返回count*/ 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]n”)。endifreturn count。}/*ioctl:對(duì)設(shè)備的I/O通道進(jìn)行管理的函數(shù) inode:設(shè)備節(jié)點(diǎn)flip:打開的一個(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”)。endif return 0。}/*open:打開函數(shù)inode:打開文件所對(duì)應(yīng)的i節(jié)點(diǎn),獲取從設(shè)備號(hào) flip:打開的一個(gè)文件open()方法最重要的是調(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”)。endif MOD_INC_USE_COUNT。return 0。}/*released:關(guān)閉函數(shù)Inode:打開文件所對(duì)應(yīng)的i節(jié)點(diǎn),主要獲取從設(shè)備號(hào) flip:打開的一個(gè)文件release()方法最重要的是調(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”)。endif MOD_DEC_INC_USE_COUNT。return 0。}struct file_operations HELLO_ops ={ // SIMPLE_HELLO設(shè)備向系統(tǒng)注冊(cè)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”,amp。 HELLO_ops)最為主要devfs_register_chrdev注冊(cè)設(shè)備驅(qū)動(dòng)程序,包括主設(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”,amp。 HELLO_ops)。showversion()。if(ret{printk(“pxa270 init_module failed with %d n[kernel]”,ret)。}else{printk(“pxa270 hello_driver register success!![kernel]n”)。} return ret。}static int __init pxa270_ HELLO_init(void)//模塊初始化函數(shù),調(diào)用HW_ HELLO_init 函數(shù){ 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_chrdev(SIMPLE_HELLO_MAJOR,“hello _ctl”)最為主要 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”)。endif devfs_unregister_chrdev(SIMPLE_HELLO_MAJOR, “hello_ctl”)。}MODULE_DESCRIPTION(“simple hello driver module”)。//描述信息 MODULE_AUTHOR(“l(fā)iduo”)。//驅(qū)動(dòng)程序作者姓名 MODULE_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 INCLUDEDIR=$(KERNELDIR)/include CROSS_COMPILE=armlinuxAS =$(CROSS_COMPILE)as LD =$(CROSS_COMPILE)ld CC =$(CROSS_COMPILE)gcc CPP =$(CC)E AR =$(CROSS_COMPILE)ar NM =$(CROSS_COMPILE)nm STRIP =$(CROSS_COMPILE)strip OBJCOPY=$(CROSS_COMPILE)objcopy OBJDUMP=$(CROSS_COMPILE)objdumpCFLAGS+=I..CFLAGS+=Wall –O –D_KERNEL_DMODULE –I$(INCLUDEDIR)TARGET = modules: $(TARGET)all: $(TARGET): $(CC)c $(CFLAGS)$^o $@clean: rmf *.o *~ Makefile文件的內(nèi)容用于執(zhí)行編譯工作,一個(gè)Makefile文件包括:① 由make工具創(chuàng)建的目標(biāo)體(target),通常是目標(biāo)文件或可執(zhí)行文件;② 要?jiǎng)?chuàng)建目標(biāo)體所依賴的文件(dependency_file);③ 創(chuàng)建每個(gè)目標(biāo)需要運(yùn)行的命令(mand)。以上兩個(gè)文件編輯完成后后,用make modules編譯驅(qū)動(dòng)程序,然后GCC編輯器編譯測(cè)試程序生成測(cè)試文件。成功生成測(cè)試文件后用超級(jí)終端開始掛載,加載驅(qū)動(dòng)程序,使用命令./test測(cè)試,觀察測(cè)試結(jié)果,實(shí)驗(yàn)完成。實(shí)驗(yàn)十三 CPU GPIO驅(qū)動(dòng)程序設(shè)計(jì)本實(shí)驗(yàn)是讓我們?cè)趌inux系統(tǒng)中插入自己的驅(qū)動(dòng)程序,調(diào)用它。實(shí)現(xiàn)用CPU GPIO控制外部LED,利用PXA270核心板上的LED驗(yàn)證我們的工作。驅(qū)動(dòng)程序代碼:驅(qū)動(dòng)程序代碼與實(shí)驗(yàn)十二無(wú)大區(qū)別,下面列出需要補(bǔ)充的代碼。一、補(bǔ)充代碼補(bǔ)充代碼1:ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_write [kernel]n”)。endif return count。補(bǔ)充代碼2:ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_open [kernel]n”)。endif補(bǔ)充代碼3:open: SIMPLE_GPIO_LED_open, read: SIMPLE_GPIO_LED_read, write: SIMPLE_GPIO_LED_write, ioctl: SIMPLE_GPIO_LED_ioctl, release: SIMPLE_GPIO_LED_release, 不同之處:GPIO_LED,主文件名、二、Makefile文件:將實(shí)驗(yàn)十二相關(guān)代碼作如下修改即可: TARGET = modules: $(TARGET)all: $(TARGET): $(CC)c $(CFLAGS)$^o $@三、作業(yè)代碼要求:使得目標(biāo)板的核心板上的LED閃爍產(chǎn)生亮7秒,滅5秒的效果。作業(yè)主要代碼:while(1){ ioctl(fd,LED_OFF)。sleep(5)。//原來(lái)為sleep(1);ioctl(fd,LED_ON)。sleep(7)。//原來(lái)為sleep(1); }不同之處:改變代碼中加粗位置括號(hào)數(shù)字,可以改變燈亮和熄滅的時(shí)間比四、測(cè)試顯示測(cè)試時(shí),超級(jí)終端上的顯示如下:實(shí)驗(yàn)十四 中斷實(shí)驗(yàn)本實(shí)驗(yàn)是讓我們學(xué)習(xí)中斷的相關(guān)概念,以及Linux系統(tǒng)是如何處理中斷的,并且學(xué)會(huì)編寫獲取和處理外中斷的驅(qū)動(dòng)程序。一、補(bǔ)充代碼補(bǔ)充代碼1:printk(“**************************************
點(diǎn)擊復(fù)制文檔內(nèi)容
外語(yǔ)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號(hào)-1