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

正文內(nèi)容

北郵嵌入式實驗報告(文件)

2024-10-19 18:16 上一頁面

下一頁面
 

【正文】 學習LINUX開發(fā)環(huán)境的搭建,通訊配置等。其中實驗一是各個硬件的互聯(lián),搭建好了實驗的硬件環(huán)境。在每次重啟宿主PC機時,都需要重新將超級終端掛載到虛擬機上,掛載之前須通過ifconfig命令查看該機的IP地址,若其已經(jīng)復位,須用命令:ifconfig eth0 up重置宿主PC機的IP地址。實驗六是配置宿主PC機端NFS服務。TFTP(Trivial File Transfer Protocol)是簡單文件傳輸協(xié)議,由于特定開發(fā)環(huán)境的制約,這一服務是必須的。當我們想用遠端檔案時,只需調(diào)用“mount”就可以遠端系統(tǒng)掛接在自己的檔案系統(tǒng)之下。驅(qū)動程序是內(nèi)核的一部分,是操作系統(tǒng)內(nèi)核與硬件設備的直接接口,驅(qū)動程序屏蔽了硬件的細節(jié),完成以下功能:? 對設備初始化和釋放;? 對設備進行管理,包括實時參數(shù)設置,以及提供對設備的操作接口; ? 讀取應用程序傳送給設備文件的數(shù)據(jù)或者回送應用程序請求的數(shù)據(jù); ? 檢測和處理設備出現(xiàn)的錯誤。? 應用程序通??梢酝ㄟ^系統(tǒng)調(diào)用open()打開設備文件,建立起與目標設備的連接。由于Linux 中將設備當做文件處理,所以對設備進行操作的調(diào)用格式與對文件的操作類似,主要包括open()、read()、write()、ioctl()、close()等。打開設備準備I/O操作。?close入口點。?read入口點。?write入口點。?ioctl入口點。select系統(tǒng)調(diào)用在檢查與設備文件相關(guān)的文件描述符時使用select入口點。name是設備名,fops是對各個調(diào)用的入口點說明。Linux在/dev目錄中為每個設備建立一個文件,用ls –l命令列出函數(shù)返回值,若小于0,則表示注冊失??;返回0或者大于0的值表示注冊成功。字符設備在cleanup_ module()函數(shù)中調(diào)用unregister_chrdev()來完成設備的注銷。對硬件寄存器進行設置。在這一步驟里對設備變量中的項進行初始化。如果設備需要IRQ支持,則要使用request_irq()函數(shù)注冊中斷。若驅(qū)動程序是內(nèi)核的一部分,初始化函數(shù)則要按如下方式聲明: int __init chr_driver_init(void)。所以進行嵌入式Linux系統(tǒng)的開發(fā),很大的工作量是為各種設備編寫驅(qū)動程序。實現(xiàn)一個嵌入式Linux設備驅(qū)動的大致流程如下。設備由一個主設備號和一個次設備號來標識。在驅(qū)動程序中實現(xiàn)驅(qū)動的注冊和卸載。(7)編譯該驅(qū)動程序到內(nèi)核中,或者用insmod命令加載模塊。 簡單設備驅(qū)動程序本次實驗的任務是編寫一個字符型設備驅(qū)動程序,并學習在應用程序中調(diào)用驅(qū)動。 CPU GPIO驅(qū)動程序設計在本實驗中,我們要編寫第一個針對實際硬件的驅(qū)動程序。實驗第一步是編寫 PXA270 GPIO 驅(qū)動程序。break。//設置GPIO96輸出模式:開燈 GPSR3 |= 0x00000001。// 休眠1秒ioctl(fd,LED_ON)。sleep(7)。在此實驗中,我們要編寫一個中斷程序,利用目標板上的按鍵SW2來產(chǎn)生中斷,使得當每次按下此按鍵時,在超級終端上打印出響應的信息。通過此實驗,我了解了硬件中斷管腳與中斷號的對應關(guān)系,以及中斷號與中斷處理程序的對應關(guān)系,對于今后編寫更為復雜的中斷程序打下基礎。實驗作業(yè)要求在上述基礎上,分別實現(xiàn)一下兩個功能:① 要求您再編寫一個測試程序,實現(xiàn) PXA270EP 目標板上的 LED 數(shù)碼管循環(huán)顯示的數(shù)字90。ret=write(fd,data,1)。count)// 倒序顯示數(shù)字data[0] = buf[count]。countdata[0] = buf[count]。 LED點陣驅(qū)動程序設計通過本實驗的操作,我們將 8X8 的點陣 LED 驅(qū)動起來并通過編寫測試程序,使其能夠按照您的意圖進行顯示。ibuf[0]=c。c = c作業(yè)二,豎向掃描:for(i=1。j} r = 1。iusleep(100)。在此基礎上,要求試寫一個實現(xiàn)輸出三角波的測試程序。// user input select getchar()。printf(“Quit DA ”)。} default : { printf(“input = %xn”,flag_select_func)。} printf(“please input your select use 1 to 4n”)。七、實驗總結(jié)及心得本學期的所有實驗均在宿主PC機與PXA270EP目標板上進行。除此之外,我認為很多基礎知識對實驗的進行也起著非常大的作用,例如數(shù)碼管的顯示原理。整個實驗讓我了解了一套完整的嵌入式系統(tǒng)驅(qū)動程序開發(fā)的全過程,學到的內(nèi)容非常豐富,相信在學習了這些內(nèi)容后,在今后的學習工作中接觸到類似內(nèi)容,我不會感到無從下手,而是能夠有條不紊。之后,我們又進行了更加深入的應用試驗,如人機接口方面的鍵盤驅(qū)動實驗、LCD控制實驗和觸摸屏數(shù)據(jù)采集與控制實驗,應用方面的多線程應用實驗等。在實驗中,不難發(fā)現(xiàn),編譯驅(qū)動程序大體框架都是一樣的,比如里面的讀函數(shù)、寫函數(shù)、ioctl函數(shù)、打開、關(guān)閉以及函數(shù)模塊的初始化并且在超級終端上顯示出等。解決方法:在超級終端下的掛載命令應該用”mount –o nolock :/ /mnt”,如果依然不能掛載需要重啟NFS服務,即在PC機終端中輸入命令”service nfs restart”兩遍后就可以掛載,當然有時候也可能是因為網(wǎng)線沒插好。: {da_create_fang(fd)。} case DA_TRI :{da_create_tri(fd)。break。// print select functions scanf(“%d”,amp。usleep(100)。為了更加清楚地理解 AD 轉(zhuǎn)換器的工作過程,請您再 編寫一個測試程序,將 UCB_ADC_INP_AD0 換成其他通道,來觀察其他 AD 通道情況。buf[1]=~r。// row for(j=1。② 要求您再編寫一個測試程序,實現(xiàn)按豎的方向順序掃描 LED 點陣數(shù)碼管。sleep(1)。sleep(1)。實現(xiàn)功能①:while(1){ { } } for(count=9。由于在測試程序中定義了數(shù)組buf[10]分別存儲了09是個數(shù),因此上述功能的實現(xiàn)方法是,分別對測試程序做如下修改:原測試程序:while(1){ { } } for(count=0。在編寫驅(qū)動程序時,主要有以下需要注意的: // 按位寫入void write_bit(int data){{ } else{GPCR2 |=(0x1 GPCR2 |=(0x1 }GPSR2 |=(0x1 void write_byte(int data){ { } } int i。SIMPLE_INT_interrupt, SA_INTERRUPT, “int_ctl”, NULL)。中斷實驗在理論課中,我們學習了許多中斷方面的知識,包括中斷向量、中斷優(yōu)先級、中斷過程等。}實驗作業(yè)要求在目標板上LED閃爍產(chǎn)生亮7秒,滅5秒的效果,很容易實現(xiàn),只需將上面的代碼改為如下代碼即可:while(1){ ioctl(fd, LED_OFF)。在測試程序中有這樣一段代碼: while(1){ ioctl(fd, LED_OFF)。return(EINVAL)。break。本實驗涉及的外部硬件只有電阻和發(fā)光二極管。雖然這樣一個字符型設備驅(qū)動程序并沒有任何實際作用,但是它讓我們輕松掌握了嵌入式驅(qū)動的編寫過程,因為復雜繁瑣的驅(qū)動,其骨架都是相同的。五、基本接口實驗在完成了基本實驗后,我們開始著手基本接口實驗。(5)實現(xiàn)所需的文件操作調(diào)用,如read、write等。次設備號僅由設備驅(qū)動程序解釋,區(qū)分被一個設備驅(qū)動控制下的某個獨立的設備。一般嵌入式處理器的生產(chǎn)商提供參考電路,也可以根據(jù)需要自行設計。嵌入式Linux系統(tǒng)驅(qū)動程序開發(fā)與普通Linux開發(fā)沒有區(qū)別。當驅(qū)動程序是以模塊的形式編寫時,則要按照如下方式聲明: int init_module(void)當運行后面介紹的insmod命令插入模塊時,會調(diào)用init_module函數(shù)完成初始化工作。初始化部分一般還負責給設備驅(qū)動程序申請包括內(nèi)存、時鐘、I/O端口等在內(nèi)的系統(tǒng)資源,這些資源也可以在open子程序或者其他地方申請。調(diào)用register_chrdev()函數(shù)來注冊設備。(2)初始化設備驅(qū)動相關(guān)的參數(shù)。包括設備注冊在內(nèi),設備驅(qū)動的初始化函數(shù)主要完成的功能是有以下5項。當有對此設備名的訪問時,Linux通過請求訪問的設備名得到主、次設備號,然后把此訪問分發(fā)到對應的設備驅(qū)動,設備驅(qū)動再根據(jù)次設備號調(diào)用不同的函數(shù)。如果動態(tài)分配主設備號成功,此函數(shù)將返回所分配 的主設備號。register_chrdev 的定義為:int register_chrdev(unsigned int major, const char *name, struct file_ operations *fops)。select入口點。對于有緩沖區(qū)的I/O操作,一般是把數(shù)據(jù)寫入緩沖區(qū)里。對于有緩沖區(qū)的I/O操作,一般是從緩沖區(qū)里讀數(shù)據(jù)。當最后一次使用設備完成后,調(diào)用close子程序。open子程序必須對將要進行的I/O操作做好必要的準備工作,如清除緩沖區(qū)等。一個設備驅(qū)動程序模塊的基本框架在系統(tǒng)內(nèi)部,I/O設備的存取通過一組固定的入口點來進行,入口點也可以理解為設備的句柄,就是對設備進行操作的基本函數(shù)。設備文件的屬性由三部分信息組成:第一部分是文件的類型,第二部分是一個主設備號,第三部分是一個次設備號。對用戶程序而言,設備驅(qū)動程序隱藏了設備的具體細節(jié),對各種不同設備提供了一致的接口,一般來說,是把設備映射為一個特殊的設備文件,用戶程序可以像對其他文件一樣對此設備文件進行操作。實驗七通過用c語言編寫的簡單程序HelloWorld,測試前面幾個實驗是否成功配置好環(huán)境,從超級終端可以看到HelloWorld程序的運行結(jié)果。實驗六為宿主PC機配置了NFS服務。當使用者想用遠端檔案時,只需調(diào)用“mount”就可以遠端系統(tǒng)掛接在自己的檔案系統(tǒng)之下。TFTP是簡單文件傳輸協(xié)議。實驗三是宿主PC端開發(fā)環(huán)境的安裝與配置。對嵌入式系統(tǒng)有進一步的了解。整個實驗讓我了解了一套完整的嵌入式系統(tǒng)驅(qū)動程序開發(fā)的全過程,學到的內(nèi)容非常豐富,相信在學習了這些內(nèi)容后,在今后的學習工作中接觸到類似內(nèi)容,我不會感到無從下手,而是能夠有條不紊。但所不同的是,要根據(jù)不同的實驗要求修改名稱,并且對其中必要的部分進行修改。所以,打基礎的工作一定要仔細謹慎。在每次重啟機器之后都需要將PC機終端的IP地址和開發(fā)板中的系統(tǒng)的IP地址設定正確,不然也無法掛載。module_exit(cleanup_DA_ctl)。} 補充代碼10 static void __exit cleanup_DA_ctl(void){endif } 補充代碼11 MODULE_DESCRIPTION(“DA_ctl driver module”)。DA_ctl_ops)。{ else } return ret。補充代碼8 release:SIMPLE_DA_release, ioctl:SIMPLE_DA_ioctl, write:SIMPLE_DA_write, //INITstaticint __initHW_DA_CTL_init(void){ int ret =ENODEV。} 補充代碼6 //OPENssize_tSIMPLE_DA_open(structinode * inode ,struct file * file){ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_open [kernel]n”)。ifdef OURS_DA_DEBUG return count。static long ioremap_addr。return ret。補充代碼1 include include include include include include include include 補充代碼2 voidshowversion(void){ printk(“*****************************n”)。printk(“initn”)。printk(“fail %dn”,ret)。adctl_ops)。補充代碼7 //INITstaticint __initHW_AD_CTL_init(void){return ret。return count。endif} 補充代碼4 //OPENssize_tadctl_open(structinode * inode ,struct file * file){ifdef OURS_HELLO_DEBUG printk(“openn”)。為了更加清楚地理解 AD 轉(zhuǎn)換器的工作過程,請您再編寫一個測試程序,將 UCB_ADC_INP_AD0 換成其他通道,來觀察其他 AD 通道情況。printf(“buf[0],buf[1]: [%x,%x]n”,buf[0],buf[1])。buf[1]=~r。usleep(200000)。// row for(j=1。devfs_unregister_chrdev(SIMPLE_LED_MAJOR, “l(fā)ed_ary_ctl”)。} 補充代碼6 static void __exit cleanup_LED_ctl(void){ifdef OURS_LED_DEBUGendif} ①要求您再編
點擊復制文檔內(nèi)容
合同協(xié)議相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1