调用此函数时:
static inline void writel(unsigned int v, volatile void __iomem *addr)
{
*(volatile unsigned int __force *)addr = cpu_to_le32(v);
}
- 地址是绝对地址还是通过 MMU?
- DMA - 写入地址是否由 MMU 转换?
- 为什么这里没有提到系统中的寄存器地址?
以下是我的回答,希望对你有所帮助:
writel
应该是通过ioremap
调用获得的虚拟地址(VA)。ioremap
将采用物理地址 (PA)。ioremap
在 linux-kernel-tree/arch/arm 中进行搜索。