0

例如,在编写驱动程序时,我们执行以下操作

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

我们获得有关分配给设备的内存的信息。

那么我有必要使用虚拟地址来使用这个内存吗

virt_base = ioremap(res->start, resource_size(res));

我们不能使用物理地址本身来寻址内存吗?

如果可以,那么使用虚拟内存是否有任何特定优势,或者这就是内核希望我们做的事情......

4

1 回答 1

1

是的,这是绝对必要的。(在 x86 上)一旦在 CPU 中启用分页,所有对操作系统可见的地址(所以你,驱动程序开发人员)都是虚拟地址。换句话说,您读取或写入的任何地址都将被 CPU 解释为虚拟地址。然后它将通过页表层次结构最终到达要放在总线上的物理地址。

你不能使用物理地址——它们不会被映射,或者映射到你想要的东西之外。这就是为什么ioremap必须存在和被使用的原因。

于 2013-03-21T06:19:42.267 回答