0

この関数を呼び出している間:

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. システムのレジスタ アドレスがここに記載されていないのはなぜですか?
4

1 に答える 1

1

これが私の答えです。

  1. はい、アドレスは MMU によって変換されます。に渡されるアドレスは、呼び出しwritelによって取得された仮想アドレス (VA) である必要がありioremapます。ioremap物理アドレス (PA) を取得します。
  2. いいえ、アドレスは MMU によって変換されません。DMA に渡されるアドレスは、物理アドレスである必要があります。典型的な DMA は、MMU の外部に存在する専用ペリフェラルです。
  3. たとえば、「ARM Linux のカーネル メモリ レイアウト」ではなく、「bcm2835 アーム ペリフェラル」を検索する必要があります。ヒントとして、Linux カーネル内のレジスタの場所を見つけたい場合は、ioremaplinux-kernel-tree/arch/arm 内を検索してください。
于 2012-11-06T08:02:08.167 に答える