簡體   English   中英

設備驅動程序和Windows

[英]Device drivers and Windows

我試圖完成PC和操作系統如何相互作用的圖片。 我就是這樣,在設備驅動程序方面,我幾乎沒有猜測。

請不要寫太復雜的東西,或者在使用高編程語言和winapi函數時你不需要知道。 我想知道,這是出於學習目的。

因此,操作系統和PC的基本結構(通過PC我的意思當然是HW)是我看到的除了直接CPU命令之外的其他所有CPU本身可以做的事情(算術運算,其寄存器訪問和內存訪問) )必須通過OS。 主要是因為3級環,你不能使用進出其他硬件的入口。 我知道有MMIO,但必須首先通過端口通信設置。

它不是一直這樣。 即使我有點年輕還記得MSDOS,我知道你可以直接訪問HW,因為沒有限制,沒有響鈴模式。 所以你可以寫字符串到diplay使用DOS函數,或直接訪問顯卡內存並自己編寫。

但隨着操作系統的發展,不再存在這種可能性。 但它很好,因為操作系統現在處理所有的硬件通信,坦率地說,它在多任務處理環境中更方便,更安全(我會說是唯一的選擇)。 所以現在你不是使用int指令來使用BIOS映射函數或DOS函數,而是在內部調用dll,而不是處理你不需要知道的所有內容。

我理解這一點。 我還可以理解,設備驅動程序是在0級環中運行的代碼段,因此它可以執行所有HW交互。 但我不明白的是OS和設備驅動程序之間的聯系。 我們舉一個例子 - 我想讓聲卡發出聲音。 所以我將Windows API稱為訪問聲卡,但會發生什么? Windows是否會調用設備驅動程序?

但是,如果它確實調用了設備驅動程序,是否意味着,所有可以通過winAPI函數調用的設備驅動程序,必須具有以某種特定方式命名的例程? 我的意思是,當我有新的聲卡時,它的驅動程序是否必須具有與舊聲卡相同的功能? 那么Windows實際上可以從它的角度調用相同的函數嗎? 但是,如果Windows具有由設備驅動程序處理的預定義功能集,則它不能使用在上一版操作系統出現之前存在的新驅動程序。

拜托,幫我理解這個爛攤子。 我真的生氣了。 謝謝。

Windows設備驅動程序有點像DLL:除了動態鏈接/加載它的應用程序,它是動態鏈接/加載它的O / S.

注冊表項告訴O / S存在哪些設備驅動程序(以便O / S知道動態鏈接/加載哪些設備驅動程序)。

設備驅動程序在環0中運行。在零環中,它們(設備驅動程序)無權訪問(無法鏈接或使用)Windows API:相反,它們可以訪問各種NT內核API。

但是,如果它確實調用了設備驅動程序,是否意味着,所有可以通過winAPI函數調用的設備驅動程序,必須具有以某種特定方式命名的例程? 我的意思是,當我有新的聲卡時,它的驅動程序是否必須具有與舊聲卡相同的功能? 那么Windows實際上可以從它的角度調用相同的函數嗎?

基本上是的。 給定類型或類中的所有設備驅動程序(例如,所有視頻驅動程序或所有磁盤驅動程序)都具有類似的API,由O / S調用(和/或由更高級別的驅動程序調用,例如磁盤驅動程序,文件系統驅動程序使用/調用的)。

Windows設備驅動程序工具包定義了各種API,並包含各種類型設備的示例驅動程序。

但是,如果Windows具有由設備驅動程序處理的預定義功能集,則它不能使用在上一版操作系統出現之前存在的新驅動程序。

O / S是動態鏈接到設備驅動程序功能:因為設備驅動程序API是預定義的,所以設備驅動程序就O / S而言是可互換的; 只要新設備驅動程序支持(向后兼容)標准設備驅動程序API,就可以編寫新設備驅動程序。

動態鏈接機制非常類似於COM對象或C ++類實現任何預定義的純抽象接口的方式:DDK中的頭文件聲明純抽象接口(如虛函數),設備驅動程序實現這些功能,並且O / S加載驅動程序並調用這些函數。

基礎知識: 請注意,這種解釋是簡化的,有時僅適用於大多數情況,而不是全部。

您將遇到的大多數硬件設備都將具有以下基本操作:寫入內存(或寄存器)。 從內存(或寄存器)讀取它們。

這足以控制硬件,為其提供所需的數據,並從中獲取所需的數據。

這些內存區域由BIOS和/或操作系統映射到PC上的物理內存范圍(驅動程序可以訪問這些內存范圍)。

所以我們現在有兩個操作READ和WRITE,設備驅動程序知道這樣做。

此外,驅動程序可以以不涉及cpu的方式進行讀寫。 這稱為直接內存訪問(DMA),通常由您的HW執行。

最后一種操作稱為INTERRUPTS,用於讓您的硬件通知您的驅動程序剛剛發生的事情。 這通常由硬件中斷CPU並調用驅動程序以高優先級執行某些操作來完成。 例如:在HW中准備好要由驅動程序讀取的映像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM