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

正文內(nèi)容

北郵電子院嵌入式實(shí)驗(yàn)報(bào)告大四上-全文預(yù)覽

  

【正文】 E_GPIO_LED_open [kernel]n”)。本實(shí)驗(yàn)涉及的外部硬件只有電阻和發(fā)光二極管。雖然這樣一個(gè)字符型設(shè)備驅(qū)動(dòng)程序并沒(méi)有任何實(shí)際作用,但是它讓我們輕松掌握了嵌入式驅(qū)動(dòng)的編寫過(guò)程,因?yàn)閺?fù)雜繁瑣的驅(qū)動(dòng),其骨架都是相同的。五、基本接口實(shí)驗(yàn)在完成了基本實(shí)驗(yàn)后,我們開(kāi)始著手基本接口實(shí)驗(yàn)。(5)實(shí)現(xiàn)所需的文件操作調(diào)用,如read、write等。次設(shè)備號(hào)僅由設(shè)備驅(qū)動(dòng)程序解釋,區(qū)分被一個(gè)設(shè)備驅(qū)動(dòng)控制下的某個(gè)獨(dú)立的設(shè)備。一般嵌入式處理器的生產(chǎn)商提供參考電路,也可以根據(jù)需要自行設(shè)計(jì)。嵌入式Linux系統(tǒng)驅(qū)動(dòng)程序開(kāi)發(fā)與普通Linux開(kāi)發(fā)沒(méi)有區(qū)別。當(dāng)驅(qū)動(dòng)程序是以模塊的形式編寫時(shí),則要按照如下方式聲明: intinit_module(void)當(dāng)運(yùn)行后面介紹的insmod命令插入模塊時(shí),會(huì)調(diào)用init_module函數(shù)完成初始化工作。初始化部分一般還負(fù)責(zé)給設(shè)備驅(qū)動(dòng)程序申請(qǐng)包括內(nèi)存、時(shí)鐘、I/O端口等在內(nèi)的系統(tǒng)資源,這些資源也可以在open子程序或者其他地方申請(qǐng)。調(diào)用register_chrdev()函數(shù)來(lái)注冊(cè)設(shè)備。(2)初始化設(shè)備驅(qū)動(dòng)相關(guān)的參數(shù)。包括設(shè)備注冊(cè)在內(nèi),設(shè)備驅(qū)動(dòng)的初始化函數(shù)主要完成的功能是有以下5項(xiàng)。當(dāng)有對(duì)此設(shè)備名的訪問(wèn)時(shí),Linux通過(guò)請(qǐng)求訪問(wèn)的設(shè)備名得到主、次設(shè)備號(hào),然后把此訪問(wèn)分發(fā)到對(duì)應(yīng)的設(shè)備驅(qū)動(dòng),設(shè)備驅(qū)動(dòng)再根據(jù)次設(shè)備號(hào)調(diào)用不同的函數(shù)。如果動(dòng)態(tài)分配主設(shè)備號(hào)成功,此函數(shù)將返回所分配的主設(shè)備號(hào)。register_chrdev的定義為:intregister_chrdev(unsigned int major, const char *name, struct file_ operations *fops)。select入口點(diǎn)。對(duì)于有緩沖區(qū)的I/O操作,一般是把數(shù)據(jù)寫入緩沖區(qū)里。對(duì)于有緩沖區(qū)的I/O操作,一般是從緩沖區(qū)里讀數(shù)據(jù)。當(dāng)最后一次使用設(shè)備完成后,調(diào)用close子程序。open子程序必須對(duì)將要進(jìn)行的I/O操作做好必要的準(zhǔn)備工作,如清除緩沖區(qū)等。一個(gè)設(shè)備驅(qū)動(dòng)程序模塊的基本框架在系統(tǒng)內(nèi)部,I/O設(shè)備的存取通過(guò)一組固定的入口點(diǎn)來(lái)進(jìn)行,入口點(diǎn)也可以理解為設(shè)備的句柄,就是對(duì)設(shè)備進(jìn)行操作的基本函數(shù)。設(shè)備文件的屬性由三部分信息組成:第一部分是文件的類型,第二部分是一個(gè)主設(shè)備號(hào),第三部分是一個(gè)次設(shè)備號(hào)。對(duì)用戶程序而言,設(shè)備驅(qū)動(dòng)程序隱藏了設(shè)備的具體細(xì)節(jié),對(duì)各種不同設(shè)備提供了一致的接口,一般來(lái)說(shuō),是把設(shè)備映射為一個(gè)特殊的設(shè)備文件,用戶程序可以像對(duì)其他文件一樣對(duì)此設(shè)備文件進(jìn)行操作。直到正確編譯。輸入程序的時(shí)候和其他編輯器是一樣的,如下圖。5)打開(kāi)PXA270_RP目標(biāo)板電源,按目標(biāo)板上的BOOT鍵,在mini中應(yīng)該會(huì)看到如下圖:6)在mini終端窗口中,如圖,輸入下列四條命令 root ifconfig eth up mounto nolock :/ /mnt cd /mnt 此時(shí),先將該窗口最小化,在后面的第 10 操作步驟中還將會(huì)回到該窗口中進(jìn)行操作。2)打開(kāi)宿主PC 機(jī)電源,進(jìn)入 Linux操作系統(tǒng)。當(dāng)我們想用遠(yuǎn)端檔案時(shí),只需調(diào)用“mount”就可以遠(yuǎn)端系統(tǒng)掛接在自己的檔案系統(tǒng)之下。TFTP(Trivial File Transfer Protocol)是簡(jiǎn)單文件傳輸協(xié)議,由于特定開(kāi)發(fā)環(huán)境的制約,這一服務(wù)是必須的。對(duì)嵌入式系統(tǒng)有進(jìn)一步的了解。感謝黃惠英老師的細(xì)心指導(dǎo)。否則,在需要一次一次編譯一次次查看錯(cuò)誤一次次改正錯(cuò)誤,這會(huì)是個(gè)費(fèi)時(shí)費(fèi)力的工作。所以完成下來(lái)難度不是很大??偟膩?lái)說(shuō),實(shí)驗(yàn)的難度不大。不然也會(huì)出現(xiàn)無(wú)法呼叫現(xiàn)象。這些實(shí)驗(yàn)內(nèi)容只要按照實(shí)驗(yàn)指導(dǎo)書上的步驟一步一步做即可,不會(huì)出現(xiàn)難以解決的問(wèn)題,一般都會(huì)做的很順利。j四、測(cè)試顯示:(以下為三角波)(以下為sin)三、實(shí)驗(yàn)總結(jié):在本次嵌入式實(shí)驗(yàn)中,我們首先在老師的指導(dǎo)下了解了嵌入式系統(tǒng),初步接觸了Linux環(huán)境。endif } printf(“create sin waven”)。jx=(j/POINT)*(5*M_PI)。unsigned long I。二、Makefile文件可以繼續(xù)用前面程序Mekefile的代碼,只需要將相應(yīng)部分的代碼修改即可。MODULE_AUTHOR(“l(fā)iduo”)。return 0。If(ret補(bǔ)充代碼9:int ret =ENODEV。補(bǔ)充代碼7:open: SIMPLE_DA_open, read: SIMPLE_DA_read, write: SIMPLE_DA_write, ioctl: SIMPLE_DA_ioctl, release: SIMPLE_DA_release補(bǔ)充代碼8:int ret =ENODEV。endif return 0。endif return count。驅(qū)動(dòng)程序代碼:一、補(bǔ)充代碼補(bǔ)充代碼1:include“../AD/” /引用AD驅(qū)動(dòng)程序的頭文件/補(bǔ)充代碼2:printk(“*****************************************n”)。printf(“val0 = %dtval1 = %dn”,val0,val1。代碼:for(i=0。return 0。If(ret補(bǔ)充代碼8:int ret =ENODEV。int ret =ENODEV。補(bǔ)充代碼5:ifdef OURS_HELLO_DEBUG printk(“SIMPLE_HELLO_release [kernel]n”)。endif return count。printk(“************************************************nn”)。usleep(200000)。buf[1]=~r。// column}c = 1。jwrite(fd,buf,2)。代碼:for(i=1。補(bǔ)充代碼6:ifdef OURS_LED_DEBUG printk(“cleanup_LED_ctl [kernel]n”)。ifdef OURS_LED_DEBUG printk(“pxa270_LED_CTL_init [kernel]n”)。endif return count。驅(qū)動(dòng)程序代碼:一、補(bǔ)充代碼補(bǔ)充代碼1:printk(“*****************************************n”)。ret=write(fd,data,1)。} 修改之處:將顯示的數(shù)有buf[count]改為buf[9count],實(shí)現(xiàn)反向循環(huán)顯示。for(count=0。MODULE_LICENSE(“GPL”)。補(bǔ)充代碼10: ifdef OURS_HELLO_DEBUG printk(“cleanup_SERIAL_LED [kernel]n”)。ifdef OURS_HELLO_DEBUG printk(“pxa270_SERIAL_LED_init [kernel]n”)。ret = devfs_register_chrdev(SERIAL_LED_MAJOR, “serial_led_ctl”, amp。補(bǔ)充代碼6: ifdef OURS_HELLO_DEBUG printk(“SERIAL_LED_release [kernel]n”)。endif return 0。endif return count。一、補(bǔ)充代碼補(bǔ)充代碼1:printk(“*****************************************n”)。補(bǔ)充代碼3:ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_write [kernel]n”)。printk(“t %s tn”,VERSION)。//原來(lái)為sleep(1);ioctl(fd,LED_ON)。補(bǔ)充代碼2:ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_open [kernel]n”)。實(shí)現(xiàn)用CPU GPIO控制外部LED,利用PXA270核心板上的LED驗(yàn)證我們的工作。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)。//驅(qū)動(dòng)程序作者姓名 MODULE_LICENSE(“GPL”)。}/*模塊卸載函數(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”)。ifdef OURS_HELLO_DEBUGprintk(“pxa270_ HELLO_init[kernel]n”)。if(ret{printk(“pxa270 init_module failed with %d n[kernel]”,ret)。 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。endif MOD_DEC_INC_USE_COUNT。}/*open:打開(kāi)函數(shù)inode:打開(kāi)文件所對(duì)應(yīng)的i節(jié)點(diǎn),獲取從設(shè)備號(hào) flip:打開(kāi)的一個(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”)。}/*write:用于向打開(kāi)的文件寫數(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”)。printk(“t %s tn”,VERSION)。NFS是指網(wǎng)絡(luò)文件系統(tǒng),它實(shí)現(xiàn)了文件在不同的系統(tǒng)間使用。掛載虛擬機(jī)的代碼為:root ifconfig eth0 up mount –o nolock :/ /mnt 實(shí)驗(yàn)五是配置宿主PC機(jī)的TFTP服務(wù)。實(shí)驗(yàn)二是在宿主PC端安裝虛擬機(jī),提供了實(shí)驗(yàn)需要的Linux操作系統(tǒng)。配置宿主PC機(jī)端的NFS服務(wù),并開(kāi)通此服務(wù)。學(xué)會(huì)在宿主機(jī)上安裝Linux操作系統(tǒng)——。了解宿主PC機(jī)與PXA270目標(biāo)版,能正確連接宿主PC機(jī)與PXA270目標(biāo)版。配置宿主PC機(jī)端的TFTP服務(wù),并開(kāi)通此服務(wù)。其中實(shí)驗(yàn)一是各個(gè)硬件的互聯(lián),搭建好了實(shí)驗(yàn)的硬件環(huán)境。在每次重啟宿主PC機(jī)時(shí),都需要重新將超級(jí)終端掛載到虛擬機(jī)上,掛載之前須通過(guò)ifconfig命令查看該機(jī)的IP地址,若其已經(jīng)復(fù)位,須用命令:ifconfig eth0 up重置宿主PC機(jī)的IP地址。實(shí)驗(yàn)六是配置宿主PC機(jī)端NFS服務(wù)。驅(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(“*************************************
點(diǎn)擊復(fù)制文檔內(nèi)容
外語(yǔ)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1