Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
例如,在编写驱动程序时,我们执行以下操作
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
我们获得有关分配给设备的内存的信息。
那么我有必要使用虚拟地址来使用这个内存吗
virt_base = ioremap(res->start, resource_size(res));
我们不能使用物理地址本身来寻址内存吗?
如果可以,那么使用虚拟内存是否有任何特定优势,或者这就是内核希望我们做的事情......
是的,这是绝对必要的。(在 x86 上)一旦在 CPU 中启用分页,所有对操作系统可见的地址(所以你,驱动程序开发人员)都是虚拟地址。换句话说,您读取或写入的任何地址都将被 CPU 解释为虚拟地址。然后它将通过页表层次结构最终到达要放在总线上的物理地址。
你不能使用物理地址——它们不会被映射,或者映射到你想要的东西之外。这就是为什么ioremap必须存在和被使用的原因。
ioremap