2016-08-04 82 views
3

我有關於ioremap的基本查詢,用於映射到內核虛擬內存中的設備IO。內核中的映射地址

我想知道如果返回的地址從ioremap傳遞到像virt_to_phys()這樣的例程,它會返回設備IO地址嗎?

感謝

回答

6

virt_to_phys()僅適用於內核線性地圖內的虛擬地址,因爲它只是一些快速地址運算,而不是一個完整的軟件錶行走。線性地圖通常只包含RAM。但是,由ioremap()返回的虛擬地址通常(可能總是,但我沒有耐心檢查每個實現)是否爲vmalloc地址,因此如果您將此地址傳遞給virt_to_phys(),那麼您會收到無意義的回報。

+0

感謝您的回覆。我看到你關於快速地址算術的觀點,它只是從虛擬地址中減去一些偏移地址來獲得物理地址。但是有沒有可用於從ioremap返回的虛擬地址返回設備IO地址的任何API? –

+1

通常的方法可能是「首先記住你所謂的'ioremap()'」。我正在努力想出一個想要某個映射設備的物理地址的合理原因_outside_該設備的驅動程序,並且在驅動程序中,如果您知道要發佈,您可以將私有數據中的物理地址存儲在CPU地址旁邊在未來需要它(例如,用於設置dmaengine請求)。 – Notlikethat

相關問題