2012-10-16 115 views
0

我使用一個memmap=8G$4G linux內核引導參數來保留內存塊。我們是否需要針對memmap保留內存塊的ioremap?

是否需要ioremap這個內存?

ioremap手冊頁說:

的ioremap執行操作的平臺特定的順序,使 總線內存CPU通過READB/readw /的ReadL/WRITEB/ writew /寫1功能和其他MMIO助手訪問。不保證返回的 地址可直接用作虛擬地址。

所以,如果我不能使用的ioremap返回的地址作爲虛擬地址直接尋址的內存,那麼一個更廣泛的問題是,當我們應該ioremap內存?

回答

1

是的,你必須ioremap這個地區才能訪問它。當您指示內核忽略此區域時,內核不會爲該內存區域設置頁面目錄條目。

如果重新映射地址空間的地址,則不能直接使用由ioremap返回的地址。當您從memory地址空間重新映射地址時,可以直接使用它們。

但是,請大家看看https://unix.stackexchange.com/questions/37729/how-can-i-reserve-a-block-of-memory-from-the-linux-kernel

+0

請閱讀對這個問題的所有答覆閱讀您的問題鏈接的評論。我已經解釋了我看到的這些問題。如果你有更多的信息請分享。謝謝。 –

+0

@JayD您是否在談論基於英特爾架構,或者您喜歡您的解決方案可以跨不同的處理器架構移植?如果前者是真的,那麼就看看內核代碼,看看內核爲內存'ioremap'做了什麼,以及爲什麼你可以直接使用這種情況下返回的地址(就像我提供給你的答案一樣)。在後一種情況下,這絕對不是一種方法。 – Serge

0

按我的經驗,保留(或阻塞)的內存是其次。

如果您嘗試保留特定容量的內存,則可能必須重新映射BIOS提供的已有內存映射。

如果您的系統不支持您這樣做,那麼您將必須確定BIOS提供的內存映射中哪些區域是空閒的,並且只能保留該區域。

相關問題