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));

输出是

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

为什么我不拿回来0x72100000

4

1 回答 1

1

我想你不会取回那个地址,因为ioremap_nocache返回的地址不能保证是虚拟地址,正如它所说

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

于 2013-02-06T09:40:13.717 回答