2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、驅動程序,xlanchen@2006.6.22,xlanchen@2006.6.22,Embedded Operating Systems,2,設備文件,Unix類操作系統(tǒng)都是基于文件概念的文件是以字符序列而構成的信息載體,因此一個I/O設備也可以當作文件來處理與普通文件交互的系統(tǒng)調用也可以直接用于I/O設備例如對/dev/lp0設備文件的write()可以將數(shù)據(jù)發(fā)往打印機,xlanchen@2006.6.22,Embedded

2、Operating Systems,3,設備文件的分類,根據(jù)設備驅動程序的基本特性,設備文件可以分為:字符設備塊設備塊設備數(shù)據(jù)可以被隨機訪問在用戶看來,訪問任何位置的數(shù)據(jù)時間大致相同典型例子:硬盤、軟盤、CD-ROM、DVD播放器等,xlanchen@2006.6.22,Embedded Operating Systems,4,,字符設備要么不可以隨機訪問,例如聲卡如果可以被隨機訪問(往往通過順序訪問方式實現(xiàn)),但隨著數(shù)

3、據(jù)的位置的不同,其訪問時間會相差很大,例如磁帶網(wǎng)絡由于網(wǎng)卡不與文件相關聯(lián),使用專門的處理方式,xlanchen@2006.6.22,Embedded Operating Systems,5,老式的設備文件,在Linux2.4中存在兩種設備文件老式的設備文件Devfs設備文件老式的設備文件這是存放在文件系統(tǒng)中的實際文件索引節(jié)點不對磁盤上的數(shù)據(jù)塊編址,而是包含硬件設備的一個標識每個文件設備包括:名字、類型(字符/塊)設備

4、號(主設備號:次設備號),xlanchen@2006.6.22,Embedded Operating Systems,6,,mknod()系統(tǒng)調用用來創(chuàng)建老式的設備文件,設備文件名,,操作權限和設備類型其中設備類型指定:S_IFCHR或S_IFBLK,,設備號16位,主設備號:次設備號,,xlanchen@2006.6.22,Embedded Operating Systems,7,,設備文件通常包含在/dev目錄中一些設

5、備文件的例子,xlanchen@2006.6.22,Embedded Operating Systems,8,,注意:字符設備與塊設備具有獨立的編號,例如,塊設備(3,0)不同于字符設備(3,0)設備文件通??梢员硎疽粋€硬件設備,例如磁盤/dev/hda或硬件設備的某一物理或邏輯分區(qū),例如磁盤分區(qū)/dev/hda2或一個虛擬的邏輯設備(不會與任何硬件設備相關聯(lián)),例如/dev/null代表一個“黑洞”,xlanchen@20

6、06.6.22,Embedded Operating Systems,9,,對內核而言,一個設備文件的名字是無關緊要的,關鍵在于設備文件的類型及其主次設備號例如,建立一個設備文件/tmp/disk,其類型為塊設備,設備號為(3,0),那么內核認為它與/dev/had等價,xlanchen@2006.6.22,Embedded Operating Systems,10,Devfs設備文件,使用主次設備號標識設備存在局限性在/dev中的

7、大多數(shù)設備是不存在的8位長的主次設備號不夠用上述原因以及其他的一些因素綜合起來,促使了devfs設備文件的產(chǎn)生Devfs虛擬文件系統(tǒng)允許設備驅動程序通過名字而不是主次設備號注冊設備,例如所有的磁盤可以放在/dev/disks目錄下/dev/hda?/dev/disks/disc0/dev/hdb?/dev/disks/disc1,xlanchen@2006.6.22,Embedded Operating Systems,11

8、,,使用devfs文件系統(tǒng)的I/O驅動程序通過調用devfs_register()注冊設備一個注冊了的設備文件自動出現(xiàn)在devfs的虛擬目錄下,xlanchen@2006.6.22,Embedded Operating Systems,12,設備文件的VFS處理,進程訪問普通文件時,通過文件系統(tǒng)訪問磁盤分區(qū)中的數(shù)據(jù)塊當進程訪問設備文件時,卻可以驅動硬件設備例如,進程訪問計算機上的溫度計對應的設備文件獲得溫度HOW?VFS,x

9、lanchen@2006.6.22,Embedded Operating Systems,13,VFS,VFS在設備文件打開時使用與設備相關的函數(shù)調用替換其缺省的文件操作這些設備相關函數(shù)調用對硬件設備進行操作,xlanchen@2006.6.22,Embedded Operating Systems,14,設備驅動程序,這是一個軟件層,使得硬件設備能夠響應預定義好的編程接口,就是一組控制設備的VFS函數(shù)接口open,read,lse

10、ek,ioctl等上述函數(shù)的具體實現(xiàn)由設備驅動程序提供此外設備驅動程序必須首先注冊并初始化自己并在進行數(shù)據(jù)傳送的時候監(jiān)控I/O操作,xlanchen@2006.6.22,Embedded Operating Systems,15,注冊設備驅動程序,注冊一個設備驅動程序意味著把它與對應的設備文件連接起來使得對設備文件發(fā)出的系統(tǒng)調用可以由內核轉化為相應的設備驅動程序對應的函數(shù)訪問一個沒有注冊設備驅動程序的設備文件將會返回錯誤碼-

11、ENODEV,xlanchen@2006.6.22,Embedded Operating Systems,16,,注冊時機如果設備驅動程序被靜態(tài)編譯進內核,則注冊發(fā)生在內核初始化階段如果作為一個內核模塊來編譯,則在裝入模塊的時候注冊(并在卸載模塊時注銷),xlanchen@2006.6.22,Embedded Operating Systems,17,設備驅動程序的初始化,對設備驅動程序進行注冊與初始化是兩件不同的事情注冊應當盡早

12、:使得用戶可以使用設備文件初始化應當推遲到最后可能的時候原因:初始化就意味著需要分配系統(tǒng)中的稀缺資源,例如:1,中斷向量(動態(tài)分配的情況下)2,用于DMA傳送的緩沖區(qū)的頁框3,包括DMA通道本身,xlanchen@2006.6.22,Embedded Operating Systems,18,監(jiān)控I/O操作,I/O操作的持續(xù)時間通常不可預知,可能與各種因素相關,例如機械裝置的狀態(tài),如對于磁盤來講,磁頭的當前位置或實際的隨機

13、事件,例如數(shù)據(jù)包何時到達網(wǎng)卡以及人為因素,例如人對鍵盤、鼠標的使用,以及發(fā)現(xiàn)打印機卡紙時的操作為此設備驅動程序必須通過某種監(jiān)控手段監(jiān)控I/O操作終止或超時,xlanchen@2006.6.22,Embedded Operating Systems,19,,兩種可用的技術輪詢模式(polling mode)CPU重復檢查(輪詢)設備的狀態(tài)寄存器,直到寄存器的值表明I/O操作已經(jīng)完成為止中斷模式(interrupt mode)如

14、果I/O控制器能夠通過IRQ線發(fā)出I/O操作結束的信號,就可以使用中斷模式,xlanchen@2006.6.22,Embedded Operating Systems,20,輪詢模式的簡單例子,Why ”--count”也可以使用jiffies進行超時判斷若時間比較長,比如ms級,可以在每次輪詢操作之后調用schedule主動放棄CPU,直到下次被調度再次輪詢,可以用來粗略的判斷超時,xlanchen@2006.6.22,Embe

15、dded Operating Systems,21,中斷模式的簡單例子,假定實現(xiàn)一個簡單的輸入字符設備的驅動程序當在對應的設備文件上發(fā)出read()系統(tǒng)調用時,一條輸入命令被發(fā)往設備的控制寄存器在一個不可預知的長時間后,設備把一個字節(jié)的數(shù)據(jù)放在輸入寄存器驅動程序然后將這個字節(jié)作為read()系統(tǒng)調用的結果返回,xlanchen@2006.6.22,Embedded Operating Systems,22,,這個驅動程序包含兩個函

16、數(shù):實現(xiàn)文件對象read方法的foo_read()函數(shù)處理中斷的foo_interrupt()函數(shù),只要用戶讀設備文件,foo_read()函數(shù)就會被觸發(fā),,對I/O設備發(fā)出讀命令,,等待讀操作的結束,由中斷處理程序喚醒,,將獲得的數(shù)據(jù)送到用戶空間中,xlanchen@2006.6.22,Embedded Operating Systems,23,,,,從設備上讀入數(shù)據(jù),,喚醒read的剩余部分,xlanchen@2006.6.2

17、2,Embedded Operating Systems,24,,再看foo_read的輸入?yún)?shù)Struct file*filp,在這個數(shù)據(jù)的私有數(shù)據(jù)項中,VFS已經(jīng)將其轉換成設備驅動程序的私有的信息foo_dev_t, 被定義為包含如下信息:一個信號量,互斥使用intr作為標志0:沒有發(fā)生/處理中斷1:處理了中斷一個等待隊列,用來給foo_read睡眠一個數(shù)據(jù)區(qū),長度為1,用來存放讀到的數(shù)據(jù),xlanchen@2006

18、.6.22,Embedded Operating Systems,25,,char* buf,用戶提供的存放數(shù)據(jù)的空間Count和ppos都沒有用到再看看foo_interrupt()中,這是通過foo一個全局變量獲得設備的私有數(shù)據(jù)結構的,這個數(shù)據(jù)結構與foo_read()中通過filp中獲得的私有數(shù)據(jù)一致foo_interrupt的輸入?yún)?shù)沒有得到使用,這是一種很普遍的情況,xlanchen@2006.6.22,Embedded

19、 Operating Systems,26,塊設備驅動程序,典型的塊設備驅動程序都有很高的平均訪問時間,例如磁盤的每次操作都需要幾個ms,主要是為了定位磁頭,一旦定位后,就可以以穩(wěn)定的高速率傳輸數(shù)據(jù)(幾十MB/秒)定義:相鄰的數(shù)據(jù)指當數(shù)據(jù)以相鄰的方式存放在磁表面時,一次單獨操作就可以訪問它們,xlanchen@2006.6.22,Embedded Operating Systems,27,,內核對塊設備處理程序的支持具有以下特點:

20、通過VFS提供統(tǒng)一接口對磁盤數(shù)據(jù)進行有效的預讀為數(shù)據(jù)提供磁盤高速緩存,xlanchen@2006.6.22,Embedded Operating Systems,28,用于塊設備文件的缺省的文件操作方法,,xlanchen@2006.6.22,Embedded Operating Systems,29,塊設備請求及其優(yōu)化,雖然塊設備驅動程序可以一次傳送一個單獨的數(shù)據(jù)塊,但是內核并不會為每個要訪問的數(shù)據(jù)塊都執(zhí)行一次I/O操作內核試

21、圖把幾個塊合并在一起,作為一個整體來處理,從而減少磁頭的平均移動時間HOW?,xlanchen@2006.6.22,Embedded Operating Systems,30,,為讀寫一個磁盤塊的請求生成塊設備請求但推遲這個請求執(zhí)行的時間這是提高塊設備性能的關鍵機制當請求發(fā)生時,內核檢查是否能通過稍微擴展前一個一直處于等待狀態(tài)的請求而滿足新的請求,從而減少定位的時間,提高效率,xlanchen@2006.6.22,Embedd

22、ed Operating Systems,31,,每個塊設備驅動程序都維護著自己的請求隊列;每個物理塊設備應當有一個請求隊列請求可以以提高磁盤性能的方式進行排序低級的設備驅動程序一般采用如下策略:處理請求隊列上的第一個請求,并設置設備控制器,以便在數(shù)據(jù)傳送完成時可以產(chǎn)生一個中斷,然后就停止當設備控制器產(chǎn)生中斷時,中斷處理程序就激活下半部分。下半部分將被處理的請求刪除,并繼續(xù)1,xlanchen@2006.6.22,Embed

23、ded Operating Systems,32,驅動程序的編寫,有專門的書《Linux設備驅動程序》來講如何寫Linux下的驅動程序中譯本有500多頁我們這里用最簡單的例子來嘗試驅動程序的編寫,xlanchen@2006.6.22,Embedded Operating Systems,33,,1,確定設備名稱與主次設備號(動態(tài)分配的不指定)2,編寫設備文件對內核上層的接口file_operations包括:init, op

24、en, release, read, write, ioctl等3,編譯并加載設備驅動(兩種方法)3.1,靜態(tài)加載:3.1.1,將初始化函數(shù)加入內核驅動初始化部分3.1.2,修改相應的Makefile, 增加驅動的目標文件3.1.3,重新編譯內核,啟用新的內核,xlanchen@2006.6.22,Embedded Operating Systems,34,,3.2,動態(tài)加載,先編譯成Linux模塊目標文件,再

25、用insmod將驅動模塊加載,還有rmmod, lsmod命令,可查看man得知相應的功能。4,在目錄/dev下建立相應的設備文件。mknod 創(chuàng)建設備對象,參數(shù): 設備名 設備類型 主設備號 次設備號5,在用戶態(tài)下編寫應用程序測試,使用該設備驅動,xlanchen@2006.6.22,Embedded Operating Systems,35,一個虛擬的字符驅動程序舉例,Char_dev.cMakefileTestchar

26、dev.c設備名定為:char_dev用命令insmod char_dev.o加載用命令lsmod察看是否成功加載使用dmesg察看主設備號使用mknod char_dev c 253 1在/dev目錄下創(chuàng)建設備文件運行Testchardev.c測試,xlanchen@2006.6.22,Embedded Operating Systems,36,課程回顧,嵌入式操作系統(tǒng)開發(fā)Linux內核主要模塊分析Linux上的應用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論