Linux設(shè)備驅(qū)動(dòng)程序課件.ppt

Linux設(shè)備驅(qū)動(dòng)程序課件.ppt

ID:57058168

大?。?35.50 KB

頁(yè)數(shù):38頁(yè)

時(shí)間:2020-07-30

Linux設(shè)備驅(qū)動(dòng)程序課件.ppt_第1頁(yè)
Linux設(shè)備驅(qū)動(dòng)程序課件.ppt_第2頁(yè)
Linux設(shè)備驅(qū)動(dòng)程序課件.ppt_第3頁(yè)
Linux設(shè)備驅(qū)動(dòng)程序課件.ppt_第4頁(yè)
Linux設(shè)備驅(qū)動(dòng)程序課件.ppt_第5頁(yè)
資源描述:

《Linux設(shè)備驅(qū)動(dòng)程序課件.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、內(nèi)容設(shè)備分類設(shè)備驅(qū)動(dòng)程序的框架字符型設(shè)備網(wǎng)絡(luò)設(shè)備文件系統(tǒng)UserSpaceFileSystemUSB設(shè)備FrameBuffer例子和使用Debug原理和Debug方法常用設(shè)備/fb/ram/loopback/zerohttp://www.docin.com/sundae_meng設(shè)備驅(qū)動(dòng)程序的任務(wù)設(shè)備初始化硬件操作和管理外部硬件和內(nèi)核空間的數(shù)據(jù)傳遞內(nèi)核空間和用戶空間的數(shù)據(jù)傳遞http://www.docin.com/sundae_meng設(shè)備驅(qū)動(dòng)程序的功能外部硬件設(shè)備驅(qū)動(dòng)程序用戶程序存儲(chǔ)緩沖用戶空間內(nèi)核空間http://www.docin.com/sundae_meng用戶態(tài)

2、程序vs內(nèi)核態(tài)程序用戶程序權(quán)限受限虛擬運(yùn)行環(huán)境邏輯地址關(guān)鍵資源訪問(wèn)受監(jiān)管函數(shù)調(diào)用由用戶控制內(nèi)核程序最高權(quán)限實(shí)際的運(yùn)行環(huán)境物理地址可訪問(wèn)所有資源函數(shù)由內(nèi)核直接調(diào)用可以運(yùn)行驅(qū)動(dòng)程序設(shè)備操作和管理能運(yùn)行在用戶態(tài)嗎?http://www.docin.com/sundae_meng地址映射與物理地址訪問(wèn)物理地址空間用戶進(jìn)程1用戶進(jìn)程2用戶進(jìn)程3虛擬地址映射用戶利用指針訪問(wèn)的是虛地址,不是物理地址,IO設(shè)備的物理地址可能是用戶進(jìn)程不可觸及的虛擬地址映射虛擬地址映射http://www.docin.com/sundae_meng直接訪問(wèn)內(nèi)核內(nèi)存(/dev/kmem)kmfd?=?open(

3、"/dev/kmem",?O_RDONLY?);? lseek(?kmfd,?offset,?SEEK_SET?);? read(?kmfd,?byteArray,?byteArrayLen?);? close(kmfd);直接訪問(wèn)內(nèi)核地址(內(nèi)核態(tài)的虛地址)一般內(nèi)核地址起始于0xC0000000http://www.docin.com/sundae_meng直接訪問(wèn)物理地址(/dev/mem)mem_fd?=?open("/dev/mem",?O_RDONLY?);? b=mmap(0,0x10000, PROT_READ

4、PROT_WRITE,MAP_SHARED, mem

5、_fd,0xA0000)…close(memfd);0xA00000xB0000Pointerbmmap將文件中的數(shù)據(jù)映射成數(shù)組這里是將物理內(nèi)存(由特殊文件/dev/mem訪問(wèn))映射成指針b指向的數(shù)組。注意,指針b的值不一定是0xA0000,它是和物理地址0xA0000對(duì)應(yīng)的用戶態(tài)的虛擬地址Linux中/dev/mem主要是用于設(shè)備內(nèi)存的訪問(wèn)(比如顯卡內(nèi)存),而不是普通存儲(chǔ)器http://www.docin.com/sundae_meng直接訪問(wèn)IO端口(/dev/port)port_fd?=?open("/dev/port",?O_RDWR);? lseek(port_fd

6、,?port_addr,?SEEK_SET);? read(port_fd,?…);write(port_fd,?…); close(port_fd);注意:不能用fopen/fread/fwrite/fclose因?yàn)樗鼈冇袛?shù)據(jù)緩沖,對(duì)讀寫(xiě)操作不是立即完成的http://www.docin.com/sundae_mengoutb()/outw()/inb()/inw()函數(shù)#include#include#include#defineBASEPORT0x378//printerintmain(){ioperm(BASE

7、PORT,3,1));//getaccesspermissionoutb(0,BASEPORT);usleep(100000);printf("status:%d",inb(BASEPORT+1));ioperm(BASEPORT,3,0));//giveupexit(0);}ioperm(from,num,turn_on)用ioperm申請(qǐng)的操作端口地址在0x000~0x3FF,利用iopl()可以申請(qǐng)所有的端口地址必須以root運(yùn)行用“gcc-02–oxxx.elfxxx.c”編譯outb(value,port);inb(port);//8-bitoutw(value

8、,port);inw(port);//16-bit訪問(wèn)時(shí)間大約1ushttp://www.docin.com/sundae_meng設(shè)備驅(qū)動(dòng)程序內(nèi)訪問(wèn)設(shè)備地址設(shè)備驅(qū)動(dòng)程序可以通過(guò)指針訪問(wèn)設(shè)備地址設(shè)備驅(qū)動(dòng)程序接觸到的還是虛擬地址,但對(duì)于外界設(shè)備有固定的設(shè)備地址映射(設(shè)備的地址在移植Linux時(shí)候確定)物理內(nèi)存地址空間設(shè)備驅(qū)動(dòng)程序虛擬地址映射設(shè)備地址空間設(shè)備地址映射設(shè)備驅(qū)動(dòng)程序虛擬地址映射設(shè)備地址映射http://www.docin.com/sundae_meng直接訪問(wèn)IO端口vs設(shè)備驅(qū)動(dòng)程序IO直接訪問(wèn)

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。