2013-02-06 48 views
0
printk(" start = %p , end = %p \n",res->start ,res->end); 
fbi->reg_base = ioremap_nocache(res->start, res->end - res->start); 
printk(" fbi->reg_base = %p \n",fbi->reg_base); 
printk(" virt_to_phys(fbi->reg_base) = %p \n", virt_to_phys(fbi->reg_base)); 
printk(" virt_to_bus(fbi->reg_base) = %p \n", virt_to_bus(fbi->reg_base)); 

输出是在Linux内核中映射io设备地址?

start = 72100000 , end = 72100fff 
fbi->reg_base = 70b10000 
virt_to_phys(fbi->reg_base) = a0b10000 
virt_to_phys(fbi->reg_base) = a0b10000 

为什么我不能找回0x72100000

+0

ioremap_cache的返回值不能保证是作为参数传递的物理地址;事实上,这是没有意义的。为什么你关心返回的指针值,而不是它是否为NULL? –

回答

1

我会想象你没有找回那种地址,因为ioremap_nocache回报不保证该地址是一个虚拟地址,因为它说here

ioremap_nocache执行的平台特定序列操作通过readb/readw/readl/writeb/writew/writel函数和其他mmio帮助程序使总线存储器CPU可访问。 返回的地址不能保证直接用作虚拟地址

相关问题