基於Windriver的驅動開發——驅動基礎

基於Windriver的驅動開發——驅動基礎 

 

在一般的操作系統(linux,Windows),不能夠從用戶空間直接訪問硬件,只能從系統內核訪問硬件。系統內核中訪問硬件的部分叫設備驅動。

 

設備驅動提供操作系統和硬件設備的接口,負責設備命令和程序命令的轉換,設備數據的IO,以及設備錯誤處理。

 

設備驅動分類

 

設備驅動按功能性主要分爲:

  • Monolithic驅動:

       1、包含支持硬件設備所有功能的單一驅動。

       2、驅動通過IOCTLs(IO control commands)和用戶程序交互,通過調用相應的WDK,ETK,DDI/DKI和硬件交互。

  • Layered驅動:
    1、作爲一堆驅動中的一部分和其它驅動一起處理IO請求的驅動。
    2、Layered驅動有時也叫過濾驅動。
  • Miniport驅動:
    1、Miniport驅動是對應於class驅動而言的,相當於class驅動的插件。
    2、class驅動爲Miniport驅動提供基本通用功能。Minport實現具體設備的特殊功能。
    3、Miniport 僅在Windows NT中支持。

設備驅動按應用的操作系統主要分爲

  • WDM驅動:
    1、Windows的驅動模型。WDM使一部分代碼與操作系統集成,這些代碼負責處理底層的緩衝管理,包括DMA和Pnp。
  • Unix設備驅動:
    1、在Unix驅動模式下,驅動根據設備分屬於三個類別:chracter(char)驅動,block驅動和
    network驅動。
    2、從用戶空間的程序訪問驅動需要通過文件系統;驅動是一個可以被打開的特殊文件。
  • Linux設備驅動:
    1、Linux設備驅動是基於Unix設備驅動模式的。
    2、在Linux下,驅動做爲內核的module被內核動態鏈接的。

驅動應用

每個設備驅動都有一個入口點。在Windows下是DriverEntry();在Linux下是init_module()。當操作系統加載設備驅動時,驅動入口會被調用。 在調用驅動入口中,包含全局的初始化操作,和驅動的回調的註冊。

和硬件連接

  • 在Windows下,硬件和驅動的連接通過INF文件。在調用DriverEntry()之前,操作系統識別設備並在設備附帶的INF文件中查找相關驅動,然後調用相應驅動的DirverEntry()。 在Linux中,硬件和驅動的連接在init_module()中定義。

用戶程序調用

  • 用戶空間程序通過硬件驅動的實例句柄和驅動交互。
  • 驅動和用戶程序程序之間傳遞的數據I/O管理封裝爲IRP(IO Request Packet)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章