0
我的理解是內核頁面大小是4K。我想分配16K連續內存作爲我的驅動程序的緩衝區。我用kmalloc(),它返回一個指針(我假設分配是成功的)。如何在內核中分配16K連續內存並獲取物理地址?
這是否意味着16K是連續的?
,是我從kmalloc的獲得()的地址的虛擬地址?如果我需要將該地址傳遞給硬件寄存器,是否使用虛擬地址或物理地址?
我的理解是內核頁面大小是4K。我想分配16K連續內存作爲我的驅動程序的緩衝區。我用kmalloc(),它返回一個指針(我假設分配是成功的)。如何在內核中分配16K連續內存並獲取物理地址?
這是否意味着16K是連續的?
,是我從kmalloc的獲得()的地址的虛擬地址?如果我需要將該地址傳遞給硬件寄存器,是否使用虛擬地址或物理地址?
是 - 使用kmalloc分配的內存在物理上是連續的,地址是虛擬地址。嘗試使用virt_to_phys()宏來獲取物理地址。
但爲什麼virt_to_phys()的返回值與我輸入的值相同(我從kmalloc獲得的值)? – michael
它在爲我工作:kmalloc()addr:0xc3c0a000和virt_to_phys()是:0x3c0a000。我有XScale-435處理器。據我所知,在Intel x86上它的工作原理是相同的 - 只需通過減去kmalloc()addr中的PAGE_OFFSET(0xc0000000爲我的系統)值。 – user2699113