簡體   English   中英

Linux在特定的物理地址分配內存

[英]Linux allocates memory at specific physical address

我正在測試PCI端點驅動程序,我想從PCI RootPort端到PCI端點端進行簡單復制。 在PCI端點方面,我們將地址從PCI地址轉換為CPU物理地址。 我們可以在轉換中配置CPU物理地址,以便它映射到特定的DRAM區域。 問題是我們如何才能在該特定的CPU物理地址上分配內存緩沖區,以確保從RootPort端進行的寫操作真正起作用?

任何建議表示贊賞。 非常感謝!

您需要先保留物理內存區域。 最簡單但最丑陋的方法是將“ mem =“參數傳遞給內核命令行,以從內核內存管理中排除您感興趣的物理內存范圍,然后使用ioremap ()獲得該內存的虛擬映射。

例如,如果您的計算機具有256 Mb的RAM,請使用mem = 255M保留最后的Mb供您使用,然后通過ioermap()對其進行映射

注意:原始答案是根據@Adrian Cox的反饋確定的。

如果您可以即時重新映射轉換,那么您應該像使用DMA的任何驅動程序一樣工作。 對此的基本參考是LDD3的第15章 ,以及Linux DMA API

您正在分配的是通過dma_alloc_coherent的DMA相干緩沖區。 在大多數平台上,您應該能夠傳遞一個空的struct device指針並獲得通用的DMA地址。 這將為您提供一個內核虛擬地址來訪問數據,以及一個dma地址,該地址是要通過轉換層映射的CPU物理地址。

如果您的地址轉換不太靈活,則可能需要修改端點的平台代碼以盡早保留此緩沖區,以滿足地址對齊要求。 這有點復雜,但是bigphysarea補丁已更新為最新的內核,可能會作為一個起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM