2014-02-06 63 views
0

我的理解是內核頁面大小是4K。我想分配16K連續內存作爲我的驅動程序的緩衝區。我用kmalloc(),它返回一個指針(我假設分配是成功的)。如何在內核中分配16K連續內存並獲取物理地址?

這是否意味着16K是連續的?

,是我從kmalloc的獲得()的地址的虛擬地址?如果我需要將該地址傳遞給硬件寄存器,是否使用虛擬地址或物理地址?

回答

1

是 - 使用kmalloc分配的內存在物理上是連續的,地址是虛擬地址。嘗試使用virt_to_phys()宏來獲取物理地址。

+0

但爲什麼virt_to_phys()的返回值與我輸入的值相同(我從kmalloc獲得的值)? – michael

+0

它在爲我工作:kmalloc()addr:0xc3c0a000和virt_to_phys()是:0x3c0a000。我有XScale-435處理器。據我所知,在Intel x86上它的工作原理是相同的 - 只需通過減去kmalloc()addr中的PAGE_OFFSET(0xc0000000爲我的系統)值。 – user2699113