是否有必要将OS分配给设备的内存映射到虚拟内存空间?

时间:2013-03-21 06:15:05

标签: memory virtual device drivers

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

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

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

因此我需要使用虚拟地址

来使用此内存
virt_base = ioremap(res->start, resource_size(res));

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

如果可以,那么使用虚拟内存有什么特别的优势,这就是内核要我们做的事情......

1 个答案:

答案 0 :(得分:1)

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

您无法使用物理地址 - 它们不会被映射,也不会映射到您想要的其他内容。这就是ioremap必须存在并被使用的原因。