Linux
可以直接從使用者空間訪問硬體嗎?
在工作中,我們有一些由 DOS 軟體控制的嵌入式設備。我的任務是評估在下一代硬體上使用 Linux 作為 DOS 的替代作業系統。我的研究使我得出這樣的結論:DOS 只是一種完全不同類型的作業系統,它允許您根據需要執行具有潛在危險的事情。據我了解,如果您希望直接訪問硬體,則必須編寫自定義驅動程序。為了滿足老闆的好奇心,我需要知道以下幾點:是否可以直接從使用者空間訪問硬體?
我的猜測是否定的,但我想徵求那些知識遠比我大的人的意見。
你的猜測是正確的。核心是唯一可以發送硬體請求的軟體。這不僅適用於 Linux。幾乎沒有比 DOS 更新的作業系統可以讓您直接訪問硬體,因為正如您所懷疑的那樣,這非常危險。
但是,編寫自己的驅動程序沒有問題,並且有大量文件可用。例如,xatlantis 上的這個教程似乎是最近的(這很重要!)和很好的來源。
是的,但它很少有用。在 32 位 x86 系統上,您可以使用
ioperm(2)
系統呼叫來設置目前程序以允許其直接執行埠 I/O。我相信這不適用於 64 位系統。您也可以lseek/read/write
針對組合進行組合/dev/port
,我認為這同樣不是很便攜。有關更多詳細資訊,請參閱http://tldp.org/HOWTO/IO-Port-Programming-2.html 。當然,這兩種方法都比編寫設備驅動程序(/dev/port
最慢)慢得多且靈活性較差。當然,這些使用者空間機制都不允許您處理中斷或類似的事情。如果性能是一個問題,您最終將編寫設備驅動程序。