2014-05-03 96 views
1

我在Linux世界中新的,想請教一個問題,這個論壇:訪問寄存器從用戶空間的物理地址

如果我想從用戶空間訪問物理地址,我沒有任何針對此特定硬件設備的內核驅動程序實現 - 我可以這樣做嗎?

我知道這不是「正確」的做法,只是想知道是否有辦法。

感謝先進!

+1

你爲什麼問?除非你編寫驅動程序或訪問圖形卡的東西,否則你不應該在意! –

+0

這是一個普通問題,用於學習目的 –

+0

從我可以直接訪問引腳和寄存器的嵌入式環境中,我可以通過直接訪問我已經使用的各種微型寄存器中的sram寄存器來切換引腳。 – Larry

回答

1

根據您的硬件架構,您可能無法直接訪問寄存器的地址,因爲內存保護機制以及內核「看到」的內存地址與用戶空間進程看到的內存地址不同。 您將需要一些內核空間代碼來將寄存器地址來回映射到對您的用戶speca進程有意義的內存地址。嘗試閱讀關於內存映射和mmap()相關的系統調用

3

不可以在沒有系統調用的情況下從應用程序訪問任意物理地址。 (這意味着你需要一個現有的驅動程序,或者你需要編寫一個內核空間驅動程序來爲你做映射所需的寄存器)

Mmap也適用於虛擬地址。所以如果你的物理地址映射到一個邏輯地址,那麼只有你可以得到想要的物理地址的映射並訪問它。

3

您一般無法訪問Linux上的物理地址(來自用戶空間程序)。

但是,您可能需要mmap(2)/dev/mem設備(有關詳細信息,請參閱mem(4))。

您仍然會使用虛擬地址的virtual memory,但您會碰巧看到部分物理RAM。

閱讀Advanced Linux Programming

相關問題