![](/img/trans.png)
[英]Linux - identify process owning a specific address in physical memory
[英]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.