2012-11-07 32 views
1

好的,我要再問一次。在之前的問題中,我無法準確發佈我想要獲取的信息。如果我們在硬件設備上安裝設備驅動程序,而不是在操作系統中安裝設備驅動程序以與硬件接口,該怎麼辦?

硬件設備的設備驅動程序安裝在操作系統中,這些驅動程序駐留在系統內核中。操作系統通過設備驅動程序與硬件設備進行通信。如果設備驅動程序直接安裝在硬件設備上而不是在操作系統中安裝,會怎樣?這樣做的後果是什麼?

+0

如果你這樣做了,你的設備將只能使用一個操作系統,即設計驅動程序的系統。驅動程序是特定於設備的*和*特定於操作系統的。他們站在兩者的交匯處。 –

+0

操作系統仍然需要設備驅動程序來與您在硬件上創建的任何接口進行接口。(一些)硬件現在已經在硬件中包含設備驅動程序,以使操作系統驅動程序更簡單。我認爲你沒有理解硬件/軟件界面。 –

回答

3

如果我明白你的意思,我的猜測是你錯過了關於司機的關鍵點。

這是相當簡化,不應從字面上;用它來幫助自己瞭解驅動程序的作用


驅動程序究竟是什麼?
它們是一段代碼,可以讓內核讀取,寫入,並且通常以方便的方式與某個設備進行交互。

你可以把它扔掉;使用IRQs檢查和內存地址(以及更多的附加內容,比如修剪幀,緩衝,檢查數據的完整性,使用非常依賴硬件的例程來執行任務等等)在NIC或其他設備中的其他東西中)沒有任何意義,因爲每次你想使用一個設備時,你都必須編寫數百/數千行代碼,並且一旦你的代碼在不同的機器上運行,你的代碼就會崩潰。

因此,我們所做的是我們爲給定設備編寫這樣的代碼並加載(通過主要在Linux中的內核模塊),以便內核可以使用它。

這段代碼是做什麼的?
它只是爲給定的設備類型提供內核的標準接口;它提供了內核(和用戶空間程序)在想要與給定設備類型進行交互時可以調用的函數列表(現在實現/整個驅動程序可能會在不同型號/供應商的相同設備之間進行更改,但對於您界面將保持不變)

爲什麼你總是需要驅動程序?
因爲設備驅動程序再次以一種方便的方式處理特定的硬件;您需要一段代碼來處理內核中的設備,然後才能在硬件中獲得驅動程序之前,有效地與硬件中的其他驅動程序進行通信。

我給你舉個例子,我所處理的所有網卡都提供了物理級別的成幀,但不在DataLink級別,因此NIC會爲您的以太網幀添加前導碼和FCS,但您仍然必須編寫MAC,爲上層設置正確的緩衝區,檢查自己的驅動程序代碼是否完整,併爲數據包向上移動(除其他外)。因此,如果你的供應商提供了硬件本身的一些功能,它仍然不能提供一個完整的驅動程序,因爲你至少需要實現這個接口,以便內核可以有效地使用這個設備。

+0

很好的解釋。只是一個小小的補充:很多設備都有一個運行在設備上的軟件,但這不是驅動程序,它被稱爲固件。實際上,驅動程序通過設備所連接的HW總線與固件交互。固件是管理設備的SW堆棧的另一個(在最底層)。 – SomeWittyUsername

相關問題