如何写入HW控制器寄存器和DMA在ARM拱形机器上工作?

时间:2012-11-06 06:30:43

标签: c linux kernel arm dma

调用此函数时:

static inline void writel(unsigned int v, volatile void __iomem *addr)
{
    *(volatile unsigned int __force *)addr = cpu_to_le32(v);
}
  1. 地址是绝对的还是通过MMU?
  2. DMA - 写入地址是否由MMU翻译?
  3. 为什么系统中的寄存器地址未提及here

1 个答案:

答案 0 :(得分:1)

以下是我的答案,希望他们能帮到你:

  1. 是的,地址由MMU翻译。传递给writel的地址应该是通过ioremap调用获得的虚拟地址(VA)。 ioremap将使用物理地址(PA)。
  2. 不,MMU不会翻译地址。传递给DMA的地址应该是物理地址。典型的DMA是存在于MMU外部的专用外设。
  3. 您必须搜索“bcm2835 arm peripherals”,而不是“ARM Linux上的内核内存布局”。作为提示,如果你想在linux内核中找到寄存器位置,请在linux-kernel-tree / arch / arm中搜索ioremap