簡體   English   中英

如何將kmalloc()地址轉換為物理地址

[英]How to convert kmalloc() address to physical address

我有一個PCI設備,該設備公開了BAR,並且在訪問設備的欄中幾乎沒有偏移。 在小節偏移之一上,我需要對64KB分配的內存進行編程。 在我的Linux驅動程序中,我使用kmalloc()分配了64KB的內存,據我所知返回了虛擬地址。 如果將此設置為偏移量,則HW將無法看到相同的內容。 如何將該虛擬地址轉換為物理地址? 當我使用Google時,我看不到指向virt_to_phys()的鏈接,但很少有響應說這與kmalloc()不能很好地配合。 任何想法如何去做?

通常,您可以從內核驅動程序中使用pci_resource_start()/ pci_resource_end()。 我假設您正在編寫設備驅動程序?

我不會自己映射內存:這就是內核功能所在的位置。 這樣,您確定它可以在所有平台上運行。 我認為該64k塊是PCI設備提供的一些內存映射? 如果是,則以上是正確的。 如果否,請提供更多信息。

與其使用kmalloc(),不如使用alloc_pages()函數。

struct page * alloc_pages(gfp_t gfp_mask,4);

一頁是4K,因此它將分配2 ^ 4 = 16頁,這等於16 * 4K = 64K內存,並返回物理地址。

暫無
暫無

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

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