實(shí)驗(yàn)一 內(nèi)存讀寫驅(qū)動(dòng)_第1頁(yè)
實(shí)驗(yàn)一 內(nèi)存讀寫驅(qū)動(dòng)_第2頁(yè)
實(shí)驗(yàn)一 內(nèi)存讀寫驅(qū)動(dòng)_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)"=內(nèi)存讀寫實(shí)”驗(yàn)一、實(shí)驗(yàn)?zāi)康模?、熟練掌握驅(qū)動(dòng)程序的框架結(jié)構(gòu)及對(duì)應(yīng)函數(shù)實(shí)現(xiàn)。2、掌握各系統(tǒng)調(diào)用函數(shù)的典型用法。3、明確內(nèi)核空間與用戶空間數(shù)據(jù)的交換方法。4、可以根據(jù)需求靈活更改驅(qū)動(dòng)程序及驗(yàn)證應(yīng)用程序。二、實(shí)驗(yàn)設(shè)備:FS2410開(kāi)發(fā)板、學(xué)生自帶筆記本、USB轉(zhuǎn)串口線、電源、網(wǎng)線。三、實(shí)驗(yàn)地點(diǎn)及時(shí)間地點(diǎn):A2-303a時(shí)間:教學(xué)周第三周四、實(shí)驗(yàn)內(nèi)容:1、在PC機(jī)上面,編寫模塊框架驅(qū)動(dòng)程序Helloworld并加載成功。2、編寫操控一塊內(nèi)存區(qū)域的字符框架程序,在通用PC上面調(diào)試成功,并移植到開(kāi)發(fā)板上。五、實(shí)驗(yàn)原理:1、模塊驅(qū)動(dòng)原理Linux內(nèi)核的整體結(jié)構(gòu)非常龐大,其包含的組件也非常多,如何使用需要的組件呢:方法一:把所有的組件都編譯進(jìn)內(nèi)核文件,即:zImage或bzImage,但這樣會(huì)導(dǎo)致兩個(gè)問(wèn)題:一是生成的內(nèi)核文件過(guò)大;二是如果要添加或刪除某個(gè)組件,需要重新編譯整個(gè)內(nèi)核。有沒(méi)有一種機(jī)制能讓內(nèi)核文件(zImage或bzImage)本身并不包含某組件,而是在該組件需要被使用的時(shí)候,動(dòng)態(tài)地添加到正在運(yùn)行的內(nèi)核中呢?Linux提供了一種叫做“內(nèi)核模塊”的機(jī)制,就可以實(shí)現(xiàn)以上效果。以下是helloworlc的實(shí)例:module.init(hello_init);module.exit(hello.exit);#inc1ude<1inux/init.h>#inc1ude<1inux/module.h>staticinthello_init(void)printk(KERN-WARNING"He1lo,world!\n")return0;staticvoidhello_exit(void)printk(KERN一INFO"Goodbye,world\n");modu1e_init(hello_init);modu1e_exit(he1lo_exit);安裝模塊時(shí)被系統(tǒng)自動(dòng)調(diào)用的函數(shù),通過(guò)module_init宏來(lái)指定,卸載模塊時(shí)被系統(tǒng)自動(dòng)調(diào)用的函數(shù),通過(guò)module_exit宏來(lái)指定,此外還有一些宏定義;比如所有模塊代碼都應(yīng)該指定所使用的許可證:MODULE_LICENSE("DualBSD/GPL");其他描述性定義:MODULE_AUTHOR("");MODULE_DESCRIPTION("");MODULE_VERSION("");MODULE_ALIAS("");MODULE_DEVICE_TABLE("");等等。2、簡(jiǎn)單字符模塊、主設(shè)備號(hào)和次設(shè)備號(hào)主設(shè)備號(hào)表示設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序;次設(shè)備號(hào)由內(nèi)核使用,用于確定設(shè)備文件所指的設(shè)備。主設(shè)備號(hào)相同的設(shè)備使用相同的驅(qū)動(dòng)程序,次設(shè)備號(hào)用于區(qū)分具體設(shè)備的實(shí)例。2.6內(nèi)核用dev_t類型變量(<linux/types.h>)來(lái)保存設(shè)備編號(hào),dev_t是一個(gè)32位的數(shù),12位表示主設(shè)備號(hào),20位表示次設(shè)備號(hào)。、一些重要的數(shù)據(jù)結(jié)構(gòu)大部分基本的驅(qū)動(dòng)程序操作涉及及到三個(gè)重要的內(nèi)核數(shù)據(jù)結(jié)構(gòu),分另file_operations、file和inode,它們的定義都在<linux/fs.h>0、字符設(shè)備的注冊(cè)內(nèi)核內(nèi)部使用structcdev結(jié)構(gòu)來(lái)表示字符設(shè)備。在內(nèi)核調(diào)用設(shè)備的操作之前,必須分配并注冊(cè)一個(gè)或多個(gè)structcdev。代碼應(yīng)包#<linux/cdev.h>,它定義了structcdev以及與其相關(guān)的一些輔助函數(shù)。注冊(cè)一個(gè)獨(dú)立的cdev設(shè)備的基本過(guò)程如下:為自己的設(shè)備結(jié)構(gòu)體分配空間?初始化structcdevcdev設(shè)置完成,通知內(nèi)核structcdev的信息從系統(tǒng)中移除一個(gè)字符設(shè)備:voidcdev_del(structcdev*p)、內(nèi)存申請(qǐng)函數(shù)驅(qū)動(dòng)程序引入了兩個(gè)Linux內(nèi)核中用于內(nèi)存管理的核心函數(shù),它們的定義都在<linux/slab.h>:void*kmalloc(size_tsize,intflags);voidkfree(void*ptr);flags的參數(shù)GFP_KERNEL請(qǐng)求動(dòng)態(tài)內(nèi)存總是分配成功,如無(wú)則等待。故不能用在中斷中。GFP_ATOMIC無(wú)條件分配內(nèi)存,沒(méi)有立即釋放,進(jìn)程不睡眠。、open和releaseopen方法提供給驅(qū)動(dòng)程序以初始化的能力,為以后的操作作準(zhǔn)備。release方法提供釋放內(nèi)存,關(guān)閉設(shè)備的功能。、read和writeread和write方法的主要作用就是實(shí)現(xiàn)內(nèi)核與用戶空間之間的數(shù)據(jù)拷貝。unsignedlongcopy_to_user(void__user*to,constvoid*from,unsignedlongcount);unsignedlongcopy_from_user(void*to,constvoid__user*from,unsignedlongcount);2、驅(qū)動(dòng)中常用的系統(tǒng)調(diào)用Open?WriteReadTOC\o"1-5"\h\zCloseloctlPoll具體詳見(jiàn)教材、《LinuxC程序設(shè)計(jì)》或《UNIX環(huán)境高級(jí)編程》。六、實(shí)驗(yàn)步驟編寫helloworld模塊及相應(yīng)makefile文件,編譯

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論