塊設備驅動程序介紹_第1頁
塊設備驅動程序介紹_第2頁
塊設備驅動程序介紹_第3頁
塊設備驅動程序介紹_第4頁
塊設備驅動程序介紹_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

塊設備驅動程序Linux0.11內核包含3個塊設備的驅動:ramdisk,硬盤,軟盤。首先需要注意的塊設備的操作方式:在系統(內核)與硬盤進行IO操作時,需要考慮三個對象之間的交互作用。它們是系統、控制器和驅動器(例如硬盤或軟盤驅動器)。系統可以直接向控制器發送命令或等待控制器發出中斷請求:控制器在接受到命令后就會控制驅動器的操作,讀/寫數據或者進行其他操作。因此我們可以把這里控制器發出的中斷信號看作是這三者之間的同步操作信號,所經歷的操作步驟為:首先系統指明控制器在執行命令結束而引發的中斷過程中應該調用的C函數,然后向塊設備控制器發送讀、寫、復位或其他操作命令。當控制器完成了指定的命令,會發出中斷請求信號,引發系統執行塊設備的中斷處理過程,并在其中調用指定的C函數對讀/寫或其他命令進行命令結束后的處理工作。塊設備表項和請求項數組構成的數據結構是塊設備部分的核心數據結構。請求隊列數組與塊設備結構為如下關系請求項數組存放所有系統中對塊設備的請求,原因估計是塊設備一般都是低速外設,所以處理時間較長,來不及的請求先存儲起來。每個塊設備表項的current_request指向當前需要處理的請求項數組中的請求項,在請求項數組中的請求項之間用指針相鏈接,這樣就構成了對某一設備的請求隊列。僅下面惡分唉析增ll熟_r粉w_椒bl蹈k.教c芒程序涼,它饅是塊導設備隙(軟晴硬盤父,直ra咽md呢is拐k浴)與艇緩沖將管理零之間芽的接稻口程慧序,逼主要互功能專是為歇塊設下備創估建塊轟設備形讀寫挨請求南項,匆并插腿入到銹指定病塊設禮備請姑求隊秧列中西。實告際的跌讀寫憐操作派由請陳求項祖處理巷函無數肅re傷qu吧es伐t_孔f父n鵲完成故。肅re用q奶ue粘st裁_f州n蹲通低過擇bl軟k.嗓h裹的宏念定義獸映射筋到實厲際設通備的魄操作免(傍do盲_h戒d_芒re灰qu透es聯t括,刺do覽_f辟d_黑re默qu臘es農t徑,蜻do俗_r沉d_隊re類qu值es筑t添)點ll婆_r免w_帝bl撿oc叉k伙調用策序列傘如上渠圖芽,問ll痛_r浸w_滋bl窄oc掉k景程序迅為左燈半邊姻圖,好作用牽是往派請求歸項鏈友表中往插入灘請求明項,征插完兇后調攪用程re福qu雨es乒t_竄fn董(辣)佛會引畝發中攀斷逐君個處寸理某介設備枕的所梁有請帖求項招。插剛入請呼求項棵是利注用電綠梯算波法插掙入到攏對應茫某個賊設備冊的請你求鏈區表中愧。甩對于灰硬盤節,首他先涉持及的外是硬濃盤的獅知識作,悠0.避1屈1晴內核澡支持商的高是飄A劍T汁硬盤任。秤硬盤痛的仿分區嚷結構懼如下謠:陵與代澤碼聯碌系較雪緊密允的是綁主引杏導記氏錄的匆分區附表,蜻內核嗚中礙pa金rt網it怨io形n忌結構誤完全翁對應業了分掠區表拐的字劉段。勢硬盤姓參數襯及富類型駐(減Li不nu鼻x0悟.1淺1厲只支壽持最籠多兩蜻個硬記盤)免hd序_i握nf貫o禾錫0兼1干hd村_i速_s個tr攝uc哨t{幕磁頭魚數享每磁東道扇獨區數疊柱面縱數道寫前野預補遵償柱廣面號重磁頭訓著陸匠柱面印號愉控制蕩字節}要硬盤沫分區豪結構執(構0櫻,宜5踐代表尸第可1嘴,芝第摘2私個硬本盤至,根1~籮4般,豎6~纏9候為兩球硬盤面的分卸區跡)及0除1眨2溪3統4割5每6顧7彈8攝9旨hd疼_s枕tr每uc傾t{怎物理亡起始嗎扇區惹號揭分者區超扇區鳥數}見sy梳s_斥se刊tu考p匙函數輝在系嶄統初譜始化趁時被船調用背,以薦下為片其步橫驟:從從0x90080讀入setup.s創建的硬盤參數表設置硬盤起始扇區號和扇區總數通過讀取CMOS信息的方法重新確定系統中硬盤數和扇區信息通過bread讀取硬盤主引導記錄分區表讀入每個硬盤分區信息加載(創建)RAMDISKrd_load()安裝根文件系統mount_root()奶硬盤申操作葉的核逝心函抓數娃是猴do惜_h磚d_向re刻qu雹es皇t貨函數絮,曠hd慚.馳c歷中其錄余函縣數均顆為其嶺服務怕。以泛下沙為找do完_h延d_島re澆qu圖es衣t催流程檢查請求合法性檢查請求合法性換算硬盤的扇區號、柱面號和磁道號若要執行復位硬盤,則復位硬盤若重新校正標志置位,則重新校正硬盤若當前請求是寫扇區命令,循環讀取狀態寄存器看是否就緒若規定時間(次數)內讀取成功,發送1個扇區數據到數據寄存器,否則寫盤失敗,去處理下一個硬盤請求若當前請求是讀扇區命令,發送讀扇區命令豐詳炊見綱p1產3偽7就解釋害和特p1乏3豆8麻圖縱6-揚3茄下面圈分析去硬盤悅驅動耍程泥序稀li制nu摩x/縱ke腫rn家el嫂/b絮lk環_d蔑rv娛/h季d.鴉c騎該文仗件內基容分松兩部誦分忙1衰.雀硬盤慰初始補化出2幼.智硬盤忘驅動總以下民關注爬硬盤易驅風動的饑實現帶。塔其主朝流程久是機do刮_h罷d_跪re倦qu欠es遼t家,由拒于該敵流程撒也在爬中斷何中被到調用壇,所寺以該贊函數戰被反甩復調殺用,那用來奸處理豆硬盤霧復位越、重三校、率讀、繭寫的村請求村。下伶面分張三部嗓分對南該函辛數拆趙解:遙復位往、重基校統喪稱為埋錯誤鄉處理燭(因國為復儉位流異程保敲含了桿重校資流程加)墳2呈.徑寫警盤春3殘.饑讀盤并錯誤節流程碑處理皂:1.1.若reset置1,置重校標志。2.診斷復位硬盤控制器3.向硬盤控制器發送命令塊(重建參數)4.中斷指針do_hd指向硬盤重校函數時間監測硬盤執行命令后的狀態,1.若出錯看是否超出最多允許出錯數,則結束對該請求項的處理,若出錯數大于最多允許錯誤數一半,則置reset=12.不出錯則繼續處理硬盤請求do_hd_requestCPU硬盤控制器復位硬盤控制器中斷過程喂對于泥結束這對該筒請求陽項的夾處理躺見綠bl鄭k.鋒h湊p1被36散e蟲nd屬_r瑞eq因ue慰s搏t本函數跨,執飛行流擇程為股:關閉設備關閉設備置當前處理中的請求設備對應緩沖區更新標志若更新標志為0,顯示出錯信息喚醒等待該請求項的進程,喚醒等待請求的進程釋放該請求項,指向下一請求項福錯誤助處理盾流程狡屬于煩輔助公流程稼,每迫次起處理辰讀、羽寫請摘求都蹦可能毯會經圖歷,曉是滋保疾證操減作成黃功的飛必要虹步驟甲。喪中斷底過程導是由而硬盤姥控制孝器觸憐發的史中斷批引起源的,塌中斷房會傳歌入陷82哄5盛9宵中斷削控制承器再叉傳蹤給酸CP習U星,操哭作系脊統會毅調疊用鴨do葡_h瞧d碌指向倉的函港數作蝶為中侵斷過幫程執狼行。掩因此憲程序雕中擋把藏do顫_h籌d挎賦值香給某睛函數染指針獄,等謊到硬短盤控泥制器捉中斷慌被詞CP源U狼接收塔后,束中斷緒過程飾就送“防自新動著”攤執行沸。至襖于如川何擾“寶自冷動灣”原,即最中斷赤實現遭原理讓,將稈在進睬程調脫度與遲系統共調用衡一章錫討論鉆。愛讀寫摧硬默盤的番流程憲大致美如下與:憤寫盤搖流程塞處理11.發送寫命令及扇區等命令,中斷指令do_hd同時指向寫扇區中斷函數2.循環讀取狀態寄存器信息并判斷請求服務標志DRQ_STAT是否置位3.若循環結束仍未置位,執行錯誤處理流程。否則進行硬盤第一次寫數據時間CPU硬盤控制器1.若硬盤控制器返回錯誤信息,執行錯誤處理流程并返回2.否則置中斷函數指針do_hd為寫硬盤函數,并向數據寄存器端口寫256字即512B,一個扇區3.若全部扇區數據已寫完,處理請求結束事宜,執行下一硬盤請求硬盤控制器執行寫一個扇區數據硬盤控制器執行寫一個扇區數據中斷中斷過程…正讀盤鏡流程泳處理11.發送讀命令及扇區等命令,中斷指令do_hd同時指向寫扇區中斷函數時間CPU硬盤控制器1.若硬盤控制器返回錯誤信息,執行錯誤處理流程并返回2.將數據從數據寄存器口讀到請求結構緩沖3.若所需讀出數據還未讀完,則置中斷指針do_hd為讀硬盤函數并返回,否則處理請求結束事宜,執行下一硬盤請求硬盤控制器執行讀一個扇區數據中斷中斷過程…醋可以蓮看出臭,寫療盤、背讀盤由流程情差別種不大哀,區泰別就四在于義寫盤膠要先慕讀狀判態寄友存器鹿信息薯并進扶行第母一次墨寫盤峽。辰下面覺分析羊軟盤怨驅動路程植序礙li臂nu巧x/家ke振rn紐el壇/b沉lk秧_d嶄rv京/f島lo摔pp旺y.鴨c禁,其養主流告程同奧樣妙是蓋do兼_f手d_酷re襯qu伙es趕t丹,摸與硬餃盤驅并動最撐大的汪不同給是用更到了面一些濁定時骨操作旺,詳協見乖p1裁5喬7而描述享,泥do庸_f總d_廉re仙qu訂es垂t欄同樣仿分碼為市1.藥復位緊、重吊校統蠅稱錯拴誤處莫理雙2.博寫屢盤雁3.掏讀燒盤錦三部重分捎錯誤蝶處理裙流程1.1.關中斷2.置重置軟盤操作后的中斷調用函數,即do_floppy指向reset_interrupt3.延遲等待后啟動軟盤控制器4.開中斷時間CPU硬盤控制器1.檢測中斷狀態,讀取命令執行結果字節2.發送設定軟驅參數命令啟動軟盤控制器中斷中斷過程復位1.當前磁道號歸零2.置校正軟盤操作后的中斷調用函數,即do_floppy指向recal_interrrupt3.發送校正命令及參數:磁道號和驅動器號4.如復位標志被置位,繼續執行復位流程1.檢測中斷狀態,讀取命令執行結果字節,若異常結束,復位標志置位2.返回do_fd_request中斷過程校正設定軟盤控制器參數校正軟盤控制器中斷樓讀盤誼、寫箱盤操鳥作僅紙有細刊微差瓦別,胞并在樂一起趴分析蹦:1.1.根據請求項,置軟盤讀寫命令碼2.添加定時器,指定驅動器到能正常運行需要的時間(秒),當定時時間到時調用函數floppy_on_interrupt時間CPU硬盤控制器1.置已選擇當前驅動器標志2.設置數字輸出寄存器DOR為當前驅動器3.執行讀寫傳輸函數transfer()定時中斷中斷過程do_fd_request1.設置當前驅動器參數,發送命令和參數2.設置指定驅動器的數據傳輸速率3.若復位標志被置位,執行錯誤處理流程并返回4.若不需要尋道,執行setup_rw_floppy,否則發送磁頭尋道命令及參數并置軟盤中斷指針do_floppy為seek_interrupt1.檢測中斷狀態命令,若出錯執行錯誤處理流程否則設置當前磁道為尋道號2.執行setup_rw_floppy中斷過程transfer設置當前驅動器設置驅動器參數中斷floppy_on

溫馨提示

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

評論

0/150

提交評論