【问题标题】:Is is necessary to map the memory allocated to the device by the OS to a virtual memory space?是否需要将操作系统分配给设备的内存映射到虚拟内存空间?
【发布时间】:2013-03-21 06:15:05
【问题描述】:

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

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

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

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

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

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

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

【问题讨论】:

    标签: memory virtual device drivers


    【解决方案1】:

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

    您不能使用物理地址 - 它们不会被映射,也不会映射到您想要的以外的东西。这就是ioremap 必须存在并被使用的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      相关资源
      最近更新 更多