同時調用這個函數:如何在ARM arch計算機上寫入HW控制器寄存器和DMA?
static inline void writel(unsigned int v, volatile void __iomem *addr)
{
*(volatile unsigned int __force *)addr = cpu_to_le32(v);
}
- 是否該地址是absoulute或通過MMU?
- DMA - 寫入地址是否由MMU翻譯?
- 爲什麼寄存器地址在系統中沒有提到here?
同時調用這個函數:如何在ARM arch計算機上寫入HW控制器寄存器和DMA?
static inline void writel(unsigned int v, volatile void __iomem *addr)
{
*(volatile unsigned int __force *)addr = cpu_to_le32(v);
}
這裏是我的答案,希望他們幫助你:
writel
的地址應該是通過ioremap
調用獲得的虛擬地址(VA)。 ioremap
將採取物理地址(PA)。ioremap
。
你是否從核心域調用該函數,例如內核模塊內? –
是這個問題的所有上下文都在內核地址 – 0x90
有一個ARM應用程序註釋「在ARM SMP系統上實現DMA」http://infocenter.arm.com/help/index.jsp?topic=/com。 arm.doc.dai0228a/index.html - 這可能會引發更多問題 – auselen