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は、プラットフォーム固有の一連の操作を実行して、readb / readw / readl / writeb / writew/writel関数およびその他のmmioヘルパーを介してバスメモリCPUにアクセスできるようにします。返されたアドレスは、仮想アドレスとして直接使用できるとは限りません

于 2013-02-06T09:40:13.717 に答える