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

正文內(nèi)容

北郵數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告-閱讀頁(yè)

2024-10-19 18:16本頁(yè)面
  

【正文】 由內(nèi)核調(diào)用chr_driver_init,完成驅(qū)動(dòng)程序的初始化。由于嵌入式設(shè)備由于硬件種類(lèi)非常豐富,在默認(rèn)的內(nèi)核發(fā)布版中不一定包括所有驅(qū)動(dòng)程序。除非系統(tǒng)不使用操作系統(tǒng),程序直接操縱硬件??梢栽谟布a(chǎn)廠(chǎng)家或者Internet上尋找驅(qū)動(dòng)程序,也可以根據(jù)相近的硬件驅(qū)動(dòng)程序來(lái)改寫(xiě),這樣可以加快開(kāi)發(fā)速度。(1)查看原理圖,理解設(shè)備的工作原理。(2)定義設(shè)備號(hào)。主設(shè)備號(hào)惟一標(biāo)識(shí)了設(shè)備類(lèi)型,即設(shè)備驅(qū)動(dòng)程序類(lèi)型,它是塊設(shè)備表或字符設(shè)備表中設(shè)備表項(xiàng)的索引。(3)實(shí)現(xiàn)初始化函數(shù)。(4)設(shè)計(jì)所要實(shí)現(xiàn)的文件操作,定義file_operations結(jié)構(gòu)。(6)實(shí)現(xiàn)中斷服務(wù),并用request_irq向內(nèi)核注冊(cè),中斷并不是每個(gè)設(shè)備驅(qū)動(dòng)所必需的。(8)測(cè)試該設(shè)備,編寫(xiě)應(yīng)用程序,對(duì)驅(qū)動(dòng)程序進(jìn)行測(cè)試。在這些實(shí)驗(yàn)中,我們學(xué)習(xí)如何編寫(xiě)設(shè)備驅(qū)動(dòng)程序,及如何用測(cè)試程序檢驗(yàn)驅(qū)動(dòng)程序是否正確,并通過(guò)改寫(xiě)測(cè)試程序正常地對(duì)驅(qū)動(dòng)程序進(jìn)行相關(guān)操作??紤]到我們初次接觸驅(qū)動(dòng)程序的編寫(xiě),對(duì)此還十分陌生,因此指導(dǎo)書(shū)中提供了本次實(shí)驗(yàn)所要用到的程序源代碼。因此,看懂本實(shí)驗(yàn)的源代碼,學(xué)習(xí)并模仿其編寫(xiě)方法,對(duì)于后續(xù)實(shí)驗(yàn)有著非常重要的意義。我們知道,凡是操作系統(tǒng)控制外部設(shè)備,即使是最簡(jiǎn)單的硬件電路,也是需要驅(qū)動(dòng)的。我們使用自己編寫(xiě)的驅(qū)動(dòng)程序與應(yīng)用程序控制 GPIO96的電平,通過(guò) LED 的亮滅來(lái)判斷,是否 CPU 做出了正確的響應(yīng)。endifreturn count。endifMOD_INC_USE_COUNT。}補(bǔ)充代碼(3)//structfile_operationsGPIO_LED_ctl_ops ={ 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, }。sleep(1)。while(1){ ioctl(fd,LED_OFF)。sleep(7)。}// 休眠1秒ioctl(fd,LED_ON)。在PXA270系統(tǒng)里,中斷控制器分外部設(shè)備和 PXA270X 處理器設(shè)備產(chǎn)生的兩個(gè)層次的中斷,前者是初級(jí)的中斷源,后者是次級(jí)中斷源,大量的次級(jí)中斷源通常被映射為一個(gè)初級(jí)中斷源。printk(“t %s tn”, VERSION)。} static intSimpleINT_temp_count = 0。printk(“SIMPLE_INT_read [kernel]n”)。printk(“SIMPL_INT_write [kernel]n”)。通過(guò)此實(shí)驗(yàn),我了解了硬件中斷管腳與中斷號(hào)的對(duì)應(yīng)關(guān)系,以及中斷號(hào)與中斷處理程序的對(duì)應(yīng)關(guān)系,對(duì)于今后編寫(xiě)更為復(fù)雜的中斷程序打下基礎(chǔ)。補(bǔ)充代碼1 voidshowversion(void){ printk(“*********************************************n”)。printk(“*********************************************nn”)。printk(“SERIAL_LED_read [kernel]n”)。} MOD_INC_USE_COUNT。return 0。return count。printk(“SERIAL_LED_write [kernel]n”)。endif MOD_DEC_USE_COUNT。} 補(bǔ)充代碼7 //structfile_operationsSERIAL_LED_ops ={ open: SERIAL_LED_open,read: SERIAL_LED_read,write:SERIAL_LED_write,ioctl:SERIAL_LED_ioctl,release:SERIAL_LED_release, }。ret =devfs_register_chrdev(SERIAL_LED_MAJOR, amp。showversion()。printk(“ pxa270 serial_led_driver register success!![kernel]n”)。return ret。printk(“pxa270_SERIAL_LED_init [kernel]n”)。if(ret)return ret。} 補(bǔ)充代碼10 static void __exit cleanup_SERIAL_LED(void){ ifdef OURS_HELLO_DEBUG ifdef OURS_HELLO_DEBUGendif }補(bǔ)充代碼11 MODULE_DESCRIPTION(“serial_led driver module”)。MODULE_LICENSE(“GPL”)。module_exit(cleanup_SERIAL_LED)。實(shí)驗(yàn)作業(yè)要求在上述基礎(chǔ)上,分別實(shí)現(xiàn)一下兩個(gè)功能:①要求您再編寫(xiě)一個(gè)測(cè)試程序,實(shí)現(xiàn) PXA270EP 目標(biāo)板上的 LED 數(shù)碼管循環(huán)顯示的數(shù)字90。由于在測(cè)試程序中定義了數(shù)組buf[10]分別存儲(chǔ)了09是個(gè)數(shù),因此上述功能的實(shí)現(xiàn)方法是,分別對(duì)測(cè)試程序做如下修改:原測(cè)試程序: while(1){ for(count=0。count)} } 結(jié)果顯示// 倒序顯示數(shù)字{ data[0] = buf[count]。sleep(1)。printk(“cleanup_SERIAL_LED [kernel]n”)。count// 更改顯數(shù)順序{ data[0] = buf[count]。sleep(1)。 LED點(diǎn)陣驅(qū)動(dòng)程序設(shè)計(jì)通過(guò)本實(shí)驗(yàn)的操作,我們將 8X8 的點(diǎn)陣 LED 驅(qū)動(dòng)起來(lái)并通過(guò)編寫(xiě)測(cè)試程序,使其能夠按照您的意圖進(jìn)行顯示。printk(“t %s tn”, VERSION)。} 補(bǔ)充代碼2 //READssize_tSIMPLE_LED_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ ifdef OURS_LED_DEBUGendif return count。} 補(bǔ)充代碼3 //IOCTLssize_tSIMPLE_LED_ioctl(structinode * inode ,struct file * file, unsigned intcmd, long data){endif} 補(bǔ)充代碼4 //structfile_operationsLED_ctl_ops ={ open: SIMPLE_LED_open, read:SIMPLE_LED_read, write: SIMPLE_LED_write, ioctl: SIMPLE_LED_ioctl, release:SIMPLE_LED_release, }。printk(“pxa270_LED_CTL_init [kernel]n”)。if(ret)return ret。printk(“SIMPLE_LED_ioctl [kernel]n”)。} 補(bǔ)充代碼6 static void __exit cleanup_LED_ctl(void){ifdef OURS_LED_DEBUGendif} ①要求您再編寫(xiě)一個(gè)測(cè)試程序,實(shí)現(xiàn)按橫的方向隔行順序掃描 LED 點(diǎn)陣數(shù)碼管。作業(yè)一,隔行掃描:printk(“cleanup_LED_ctl [kernel]n”)。devfs_unregister_chrdev(SIMPLE_LED_MAJOR, “l(fā)ed_ary_ctl”)。ibuf[0]=c。// row for(j=1。c = cwrite(fd,buf,2)。usleep(200000)。// column結(jié)果顯示作業(yè)二,豎向掃描:for(i=1。buf[1]=~r。j} r = 1。printf(“buf[0],buf[1]: [%x,%x]n”,buf[0],buf[1])。// sleep second r=rbuf[1]=~r。為了更加清楚地理解 AD 轉(zhuǎn)換器的工作過(guò)程,請(qǐng)您再編寫(xiě)一個(gè)測(cè)試程序,將 UCB_ADC_INP_AD0 換成其他通道,來(lái)觀察其他 AD 通道情況。} struct ucb1x00 *ad_ucb。endif} 補(bǔ)充代碼4 //OPENssize_tadctl_open(structinode * inode ,struct file * file){ifdef OURS_HELLO_DEBUG printk(“openn”)。endif return 0。return count。endif return count。補(bǔ)充代碼7 //INITstaticint __initHW_AD_CTL_init(void){return ret。ifdef OURS_HELLO_DEBUG int ret =ENODEV。adctl_ops)。ad_ucb=ucb1x00_get()。printk(“fail %dn”,ret)。read: ioctl: adctl_read, adctl_ioctl, write: adctl_write, open: adctl_open, release:adctl_release,ADCTL_MAJOR, 0, S_IFCHR, amp。printk(“initn”)。if(ret)}補(bǔ)充代碼9 static void __exit cleanup_AD_ctl(void){} DA驅(qū)動(dòng)實(shí)驗(yàn)通過(guò)本實(shí)驗(yàn)的操作,我們使用示波器看到了通過(guò)DA轉(zhuǎn)換而輸出的波形。補(bǔ)充代碼1 include include include include include include include include 補(bǔ)充代碼2 voidshowversion(void){ printk(“*****************************n”)。endif devfs_unregister_chrdev(ADCTL_MAJOR,“ad_ctl”)。return ret。} printk(“t %st n”,VERSION)。static long ioremap_addr。endifreturn count。ifdef OURS_DA_DEBUG return count。long data){ ifdef OURS_DA_DEBUGprintk(“SIMPLE_DA_ioctl[kernel]n”)。} 補(bǔ)充代碼6 //OPENssize_tSIMPLE_DA_open(structinode * inode ,struct file * file){ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_open [kernel]n”)。return 0。補(bǔ)充代碼8 release:SIMPLE_DA_release, ioctl:SIMPLE_DA_ioctl, write:SIMPLE_DA_write, //INITstaticint __initHW_DA_CTL_init(void){ int ret =ENODEV。printk(“pxa270_DA_CTL_init [kernel]n”)。{ else } return ret。{ if(ret 0)showversion()。DA_ctl_ops)。if(ret)return ret。} 補(bǔ)充代碼10 static void __exit cleanup_DA_ctl(void){endif } 補(bǔ)充代碼11 MODULE_DESCRIPTION(“DA_ctl driver module”)。MODULE_LICENSE(“GPL”)。module_exit(cleanup_DA_ctl)。ifdef OURS_DA_DEBUG六、實(shí)驗(yàn)中遇到的問(wèn)題及解決方法每一次上課重新啟動(dòng)后,當(dāng)需要將宿主PC機(jī)的根目錄掛在到PXA270EP目標(biāo)板的mnt目錄下(即在超級(jí)終端中輸入命令“mount –o soft,timeo=100,rsize=1024 :/ /mnt”)時(shí),常顯示無(wú)法掛載。在每次重啟機(jī)器之后都需要將PC機(jī)終端的IP地址和開(kāi)發(fā)板中的系統(tǒng)的IP地址設(shè)定正確,不然也無(wú)法掛載。在實(shí)驗(yàn)中,我們先建立硬件實(shí)驗(yàn)平臺(tái),又建立主機(jī)軟件開(kāi)發(fā)環(huán)境,接著為實(shí)驗(yàn)進(jìn)行各項(xiàng)配置,最后完成了各個(gè)實(shí)驗(yàn)中的多種功能。所以,打基礎(chǔ)的工作一定要仔細(xì)謹(jǐn)慎。通過(guò)這學(xué)期的實(shí)驗(yàn),我逐步完成了建立實(shí)驗(yàn)軟件開(kāi)發(fā)平臺(tái),搭建實(shí)驗(yàn)編譯軟件環(huán)境,在PC上編輯、編譯一個(gè)應(yīng)用程序,并且在嵌入式系統(tǒng)上運(yùn)行和調(diào)試它的過(guò)程。但所不同的是,要根據(jù)不同的實(shí)驗(yàn)要求修改名稱(chēng),并且對(duì)其中必要的部分進(jìn)行修改。在掌握了基礎(chǔ)知識(shí)之后,上機(jī)的過(guò)程會(huì)顯得相對(duì)簡(jiǎn)單,尤其是代碼框架已經(jīng)給出,我們所以需要做的就是根據(jù)需要稍作改動(dòng)來(lái)得到我們想要的結(jié)果。整個(gè)實(shí)驗(yàn)讓我了解了一套完整的嵌入式系統(tǒng)驅(qū)動(dòng)程序開(kāi)發(fā)的全過(guò)程,學(xué)到的內(nèi)容非常豐富,相信在學(xué)習(xí)了這些內(nèi)容后,在今后的學(xué)習(xí)工作中接觸到類(lèi)似內(nèi)容,我不會(huì)感到無(wú)從下手,而是能夠有條
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1