可以直接從用戶空間存取硬體嗎?

可以直接從用戶空間存取硬體嗎?

在工作中我們有一些由DOS軟體控制的嵌入式設備。我的任務是評估 Linux 在下一代硬體上作為 DOS 替代作業系統的使用情況。我的研究使我得出這樣的結論:DOS 只是一種完全不同類型的作業系統,如果您願意,它可以讓您做有潛在危險的事情。根據我的理解,如果您希望直接存取硬件,則必須編寫自訂驅動程式。為了滿足老闆的好奇心,我需要知道以下:是否可以直接從使用者空間存取硬體??

我的猜測是否定的,但我想徵求那些比我更知識淵博的人的意見。

答案1

是的,但很少有用。在32位元x86系統上,您可以使用ioperm(2)系統呼叫來設定目前進程,以允許其直接執行連接埠I/O。我相信這在 64 位元系統上不起作用。你也可以進行lseek/read/write組合/dev/port,我認為這同樣不太便攜。看http://tldp.org/HOWTO/IO-Port-Programming-2.html了解更多詳細資訊。當然,這兩種方法都比編寫設備驅動程式慢得多且靈活性差(/dev/port最慢的)。當然,這些使用者空間機制都不允許您處理中斷或類似的事情。如果效能是一個問題,您最終將編寫裝置驅動程式。

答案2

你的猜測是正確的。核心是唯一可以發送硬體請求的軟體。這不僅適用於 Linux。事實上,沒有比 DOS 更新的作業系統可以讓您直接存取硬件,因為正如您所懷疑的那樣,這非常危險。

不過,編寫自己的驅動程式沒有問題,並且有大量文件可用。例如,本教學位於 xatlantis似乎是最近的(這很重要!)並且是很好的來源。

答案3

從用戶空間存取硬體絕對是可能的。特別是如果硬體暫存器是記憶體映射的。例如,烏伊奧

相關內容