在 linux 内核中,使用 ioremap() 将一个物理地址转换成虚拟地址,然后再使用 virt_to_phys() 却无法将这个虚拟地址转换成原来的物理地址,这是为什么?
实例:
printk("res->start = 0x%x\n", res->start);
dest_ptr = __devm_ioremap(dev, res->start, size, type);
printk("dest_ptr = 0x%x\n", dest_ptr);
printk("phy_addr = 0x%x\n", virt_to_phys(dest_ptr));
[ 0.219313] res->start = 0x1c30000
[ 0.219335] dest_ptr = 0xf08e0000
[ 0.219339] phy_addr = 0x708e0000
期望 res->start 和 phy_addr 相等。