我有一個字符驅動程序,其中我添加的接口函數之一是alloc_contig(int order)
,其中order是所需數量的4K頁的log2。 該函數分配連續的物理內存並使用remap_pfn_range
函數將其映射到用戶空間使用情況。 我試圖寫的功能,它釋放內存dealloc_contig(va)
現在在內核我有虛擬地址用戶給予免費,我需要獲得底層的物理地址,所以我試圖使用virt_to_phys
,但它並沒有給我期望的地址。 日誌:虛擬內核邏輯地址
//allocating
page address is ffff880868764000 //allocated using alloc_pages
//deallocating
virtual address from user 7f4c7e095000
when converted to PA using virt_to_phys got f74c7e095000 instead of ffff880868764000
你能幫我嗎?
謝謝你的幫助。你可以請,如果可能的話,指導我如何找到適當的VMA結構?正如我所看到的,在mm_strct中有一個名爲mm_rb的紅黑樹,其中包含vma結構。那麼如何訪問進程的mm_struct,以及如何在此樹中搜索? –
嗨,這是通過do_munmap() - > find_vma()完成的,你可以看看這個鏈接的源代碼。 http://lxr.free-electrons.com/source/mm/mmap.c#L2411 – Lin