2016-03-08 65 views
-1

我編寫了一個內核驅動程序,它向用戶空間公開我的I/O設備。 使用mmap應用程序獲取寫入設備的虛擬地址。 由於我希望應用程序寫入使用大PCIe事務,因此驅動程序將此內存映射爲寫入組合。 根據內存類型(寫入組合或非緩存),應用程序應用最佳方法來處理設備。檢查映射內存是否支持寫入組合

但是,某些體系結構不支持寫入組合,也可能只支持部分內存空間。 因此,內核驅動程序告訴應用程序是否成功映射內存以進行寫入組合非常重要。

我需要一個通用的方法來檢查內核驅動程序,如果它映射(或映射)的內存是寫入組合。 我該怎麼做?

這裏是我的代碼部分:

的vma-> vm_page_prot中= pgprot_writecombine(的vma-> vm_page_prot中); io_remap_pfn_range(vma,vma-> vm_start,pfn,PAGE_SIZE,vma-> vm_page_prot);

回答

0

首先,您可以瞭解架構是否支持在編譯時與宏ARCH_HAS_IOREMAP_WC進行寫入組合。參見例如here

在運行時,您可以檢查ioremap_wcset_memory_wc以及朋友是否成功的返回值。

+0

謝謝邁克爾。 – Guy

+0

但我嘗試將用戶空間映射到我的設備。因此我使用處理vm_area_struct的mmap和AFAIU ioremap_wc不處理。 另外,當未定義ARCH_HAS_IOREMAP_WC時,不一定意味着拱不支持WC存儲器 – Guy