Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)基礎(chǔ)(PPT).ppt

Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)基礎(chǔ)(PPT).ppt

ID:50107463

大小:388.00 KB

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

時(shí)間:2020-03-04

Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)基礎(chǔ)(PPT).ppt_第1頁(yè)
Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)基礎(chǔ)(PPT).ppt_第2頁(yè)
Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)基礎(chǔ)(PPT).ppt_第3頁(yè)
Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)基礎(chǔ)(PPT).ppt_第4頁(yè)
Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)基礎(chǔ)(PPT).ppt_第5頁(yè)
資源描述:

《Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)基礎(chǔ)(PPT).ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、Linux設(shè)備驅(qū)動(dòng)程序 開(kāi)發(fā)基礎(chǔ)主講人:TonyShen課程目標(biāo)Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)簡(jiǎn)介L(zhǎng)inux設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)Linux設(shè)備驅(qū)動(dòng)程序加載方式實(shí)驗(yàn):編寫(xiě)一個(gè)字符設(shè)備驅(qū)動(dòng)程序(LED或蜂鳴器)分別用靜態(tài)編譯,模塊動(dòng)態(tài)加載方法實(shí)現(xiàn)加入內(nèi)核設(shè)備驅(qū)動(dòng)程序應(yīng)用程序驅(qū)動(dòng)程序設(shè)備writereadioctlioctl設(shè)備驅(qū)動(dòng)程序特點(diǎn)⑴核心代碼:設(shè)備驅(qū)動(dòng)程序是核心的一部分,像核心中其他的代碼一樣,出錯(cuò)將導(dǎo)致系統(tǒng)的嚴(yán)重?fù)p傷。一個(gè)編寫(xiě)不當(dāng)?shù)脑O(shè)備驅(qū)動(dòng)程序甚至能夠使系統(tǒng)崩潰導(dǎo)致文件系統(tǒng)的破壞和數(shù)據(jù)的丟失;⑵標(biāo)準(zhǔn)接口:

2、設(shè)備驅(qū)動(dòng)程序必須為L(zhǎng)inux核心或者其從屬的子系統(tǒng)提供一個(gè)標(biāo)準(zhǔn)的接口;⑶核心機(jī)制:設(shè)備驅(qū)動(dòng)程序可以使用標(biāo)準(zhǔn)的核心服務(wù)比如內(nèi)存分配、中斷發(fā)送和等待對(duì)列等;⑷動(dòng)態(tài)可加載:多數(shù)的Linux設(shè)備驅(qū)動(dòng)程序可以在核心模塊發(fā)出加載請(qǐng)求時(shí)進(jìn)行加載,同時(shí)在不使用設(shè)備時(shí)進(jìn)行卸載,這樣核心可以有效地利用系統(tǒng)的資源⑸可配置:Linux設(shè)備驅(qū)動(dòng)屬于核心的一部分,用戶(hù)可以根據(jù)自己的需要進(jìn)行配置來(lái)選擇適合自己的驅(qū)動(dòng)用戶(hù)態(tài)與內(nèi)核態(tài)Linux運(yùn)轉(zhuǎn)在兩種模式下,一種是用戶(hù)態(tài),另一種是內(nèi)核態(tài)。內(nèi)核態(tài)有較高的權(quán)限,可以控制處理器內(nèi)存的映射和

3、分配方式,訪問(wèn)外設(shè)空間和處理器狀態(tài)寄存器,控制中斷等。用戶(hù)態(tài)只能運(yùn)行系統(tǒng)上的應(yīng)用程序。驅(qū)動(dòng)程序作為系統(tǒng)內(nèi)核的一部分,工作在內(nèi)核態(tài)。通過(guò)get_userput_usercopy_from_usercopy_to_user等函數(shù)實(shí)現(xiàn)應(yīng)用程序和驅(qū)動(dòng)程序之間傳送數(shù)據(jù)(指針)。Linux設(shè)備的分類(lèi)字符設(shè)備以字節(jié)為單位逐個(gè)進(jìn)行I/O操作字符設(shè)備中的緩存是可有可無(wú)不支持隨機(jī)訪問(wèn)如串口設(shè)備塊設(shè)備塊設(shè)備的存取是通過(guò)buffer、cache來(lái)進(jìn)行可以進(jìn)行隨機(jī)訪問(wèn)例如IDE硬盤(pán)設(shè)備可以支持可安裝文件系統(tǒng)網(wǎng)絡(luò)設(shè)備通過(guò)BSD套

4、接口訪問(wèn)設(shè)備文件Linux抽象了對(duì)硬件的處理,所有的硬件設(shè)備都可以作為普通文件一樣來(lái)看待可以使用和操作文件相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口來(lái)完成打開(kāi)、關(guān)閉、讀寫(xiě)和I/O控制操作對(duì)用戶(hù)來(lái)說(shuō),設(shè)備文件與普通文件并無(wú)區(qū)別字符設(shè)備和塊設(shè)備是通過(guò)文件節(jié)點(diǎn)訪問(wèn)的。在Linux的文件系統(tǒng)中,可以找到(或者使用mknod創(chuàng)建)設(shè)備對(duì)應(yīng)的文件名,稱(chēng)這種文件為設(shè)備文件。設(shè)備文件命令ls–l/dev可列出系統(tǒng)的設(shè)備文件主設(shè)備號(hào)和次設(shè)備號(hào)主設(shè)備號(hào):標(biāo)識(shí)該設(shè)備的種類(lèi),也標(biāo)識(shí)了該設(shè)備所使用的驅(qū)動(dòng)程序主設(shè)備號(hào)的范圍只能是1-255Lin

5、ux內(nèi)核支持動(dòng)態(tài)分配主設(shè)備號(hào)次設(shè)備號(hào):標(biāo)識(shí)使用同一設(shè)備驅(qū)動(dòng)程序的不同硬件設(shè)備?同一個(gè)驅(qū)動(dòng)程序可以管理多個(gè)設(shè)備,它們依靠次設(shè)備號(hào)來(lái)區(qū)別。次設(shè)備號(hào)只在驅(qū)動(dòng)程序內(nèi)部使用,系統(tǒng)內(nèi)核直接把次設(shè)備號(hào)傳遞給驅(qū)動(dòng)程序,由驅(qū)動(dòng)程序去管理。設(shè)備文件系統(tǒng)Linux內(nèi)核自己管理設(shè)備文件,完成設(shè)備文件節(jié)點(diǎn)的創(chuàng)建、刪除。(devfs,devicefilesystem)在linux2.4/2.6內(nèi)核中,設(shè)備文件系統(tǒng)可在配置內(nèi)核時(shí)定制。linux2.4內(nèi)核配置層次Filesystems->/devfilesystemsupportl

6、inux2.6內(nèi)核配置層次Filesystems->Pseudofilesystem->/devfilesystemsupport系統(tǒng)驅(qū)動(dòng)程序通過(guò)CONFIG_DEVFS_FS宏定義判斷系統(tǒng)是否有對(duì)設(shè)備文件系統(tǒng)的支持。配置設(shè)備文件系統(tǒng)Linux設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)Linux設(shè)備驅(qū)動(dòng)程序的代碼結(jié)構(gòu)大致可以分為如下幾個(gè)部分:驅(qū)動(dòng)程序的注冊(cè)與注銷(xiāo)、設(shè)備的打開(kāi)與釋放、設(shè)備的讀寫(xiě)操作、設(shè)備的控制操作、設(shè)備的中斷和輪詢(xún)處理。一個(gè)最簡(jiǎn)單字符驅(qū)動(dòng)程序,由下面5個(gè)函數(shù)和1個(gè)結(jié)構(gòu)體就可組成。staticintmy_open(

7、structinode*inode,structfile*filp){設(shè)備打開(kāi)時(shí)的操作…}staticintmy_release(structinode*inode,structfile*filp){設(shè)備關(guān)閉時(shí)的操作…}staticintmy_write(structfile*file,constchar*buffer,size_tcount,loff_t*ppos){設(shè)備寫(xiě)入時(shí)的操作…}驅(qū)動(dòng)程序結(jié)構(gòu)staticstructfile_operationsmy_fops={對(duì)文件操作結(jié)構(gòu)體成員定義初始值

8、…}staticint__initmy_init(void){初始化硬件,注冊(cè)設(shè)備,創(chuàng)建設(shè)備節(jié)點(diǎn)…}staticvoid__exitmy_exit(void){刪除設(shè)備節(jié)點(diǎn),注銷(xiāo)設(shè)備…}頭文件與系統(tǒng)定義#include#include#include#include#include#inc

當(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. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(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)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。