在编写驱动程序时,我们执行以下操作
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
我们获取有关分配给设备的内存的信息。
因此我需要使用虚拟地址
来使用此内存virt_base = ioremap(res->start, resource_size(res));
我们不能使用物理地址本身来寻址内存吗?
如果可以,那么使用虚拟内存有什么特别的优势,这就是内核要我们做的事情......
答案 0 :(得分:1)
是的,这是绝对必要的。 (在x86上)在CPU中启用分页后,操作系统可以看到所有地址(因此您,驱动程序开发人员)是虚拟地址。换句话说,您读取或写入的任何地址都将被CPU解释为虚拟地址。然后它将通过页表层次结构最终到达物理地址以便放在总线上。
您无法使用物理地址 - 它们不会被映射,也不会映射到您想要的其他内容。这就是ioremap
必须存在并被使用的原因。