Kernel的virtual memory適用linear mapping,physical address 0對應到kernel virtual memory的PAGE_OFFSET(通常是0xC000_0000)
也就是說kernel virtual address - PAGE_OFFSET就是physical address
virt_to_phy() and __pa()還有phy_to_virt and __va() 就是用這個原理
而kernel virtual address如何translate到physical page frame呢:
利用mem_map加上page frame number後就可以得到page frame
而mem_map是在Linux系統初始時就建好了,是用來存page frame的array
#define virt_to_page(kaddr) (mem_map + (__pa(kaddr) >> PAGE_SHIFT))
// kernel virtual address translate to page pointer
0 意見:
張貼留言