2013-03-21 74 views
0

例如在写驱动程序我们做以下是否需要将操作系统分配给设备的内存映射到虚拟内存空间?

res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 

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

因此,它是必要的,我使用这块内存使用虚拟地址

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

我们不能用物理地址本身来解决内存?

如果能,那么,有没有使用虚拟内存中的任何特定的优点或这是内核希望我们如何做...

回答

1

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

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