這個調用返回的DMA地址是否與物理地址相同? LDD3表示DMA地址應該被驅動程序視爲不透明。我想要映射這個DMA緩衝區,以便用戶空間可以直接讀取/寫入它。問題是我應該爲remap_pfn_range指定什麼PFN(現在我的驚喜(內核3.4+)對傳統內存和I/O內存相同)。我可以將DMA地址轉換爲無符號長整型並將其轉換爲PFN嗎?這不違反LDD3關於不透明性的說法嗎?關於dma_alloc_coherent的一些問題
dma_alloc_coherent
是否始終在內部使用__get_free_pages
?這是否意味着該區域可能總是被過度分配(因爲第一個函數需要字節,但第二個函數以頁爲單位分配)?有沒有一種方法可以爲從
__get_free_pages
的調用獲得的多個連續頁面設置單個流式映射?dma_map_page
僅適用於單頁。
16
A
回答
11
沒有,返回的地址是一個虛擬地址,否則你將無法從內核空間訪問它。它是代表物理地址的dma_handle,但它是不透明的。您需要在返回的地址上使用virt_to_phys,然後將其傳遞給remap_pfn_range。
我不相信它(雖然它可能是平臺依賴),但它確實分配頁面。如果你想爲DMA使用更少的內存,你應該使用dma_pool_create,然後從那裏分配區域。
您可以使用dma_map_single而不是dma_map_page。
我建議諮詢DMA-API.txt關於這些東西的更多細節。
相關問題
- 1. 關於關注WPF的一些問題
- 2. 關於Perceptron的一些問題
- 3. 關於使用resque的一些問題
- 4. 關於MST的一些問題
- 5. 關於Flurry的一些問題
- 6. 關於dealloc方法的一些問題
- 7. 關於'delayed_job'的一些基本問題
- 8. 關於Java AbstractProcessor的一些問題?
- 9. 關於Elmah的一些問題
- 10. 關於一些unix代碼的問題?
- 11. 關於智能卡的一些問題
- 12. 關於sipp的一些問題
- 13. 關於innerHTML的一些問題
- 14. 關於Mulesoft的一些概念問題
- 15. 關於PHPExcel圖表的一些問題
- 16. 關於MFC開發的一些問題?
- 17. 關於RIA服務的一些問題
- 18. 關於C語法的一些問題
- 19. 關於perl程序的一些問題
- 20. 關於c的一些問題#
- 21. 關於Extjs 4.0.7的一些問題
- 22. 關於KeyEvent的一些問題
- 23. 關於FASM的一些問題
- 24. 關於URLEncoder和URLDecoder的一些問題?
- 25. 關於Asp.net MVC的一些問題
- 26. 關於pthread_mutex_lock和pthread_mutex_unlock的一些問題
- 27. 關於Windows DLL的一些問題?
- 28. 關於OpenId的一些問題
- 29. 關於C++的一些問題try catch
- 30. 關於HTML5的一些問題FileSystemAPI
您是否發現將dma內存附加到remap_pfn_range內存的正確方法? – Luca 2015-01-27 18:53:24