- 论坛徽章:
- 0
|
写了一个内核程序,想获得用户空间的虚拟地址所对应的物理地址,但是老是有问题,请大侠们会诊!
内核:linux 2.4.20
static char * virt_to_phy(struct task_struct * p,
struct vm_area_struct *vm,
unsigned long addr) {
pgd_t *pgd;
pmd_t *page_middle;
pte_t *pte;
pgd = pgd_offset(p->;mm, addr);
page_middle =ckpt_pmd_offset(pgd, addr);
pte = pte_offset_kernel(page_middle,addr);
if (!pte_present(*pte)) {
printk("ERROR: Page for %08lx still not present!\n", addr);
return NULL;
}
return (char *)(page_address(pte_page(*pte)) + (addr & ~PAGE_MASK));
经过初步调试 ,好像错误在最后一行。 |
|