Linuxカーネルを読んでいます。データをメモリに書き込む方法に興味があります。
ドライバーの一部では、関数でwritel()定義された関数を使用し、その関数の定義で命令asm/io.hを使用しmovntiます-実際、この命令が一種の命令であることを除いて、この命令が何を意味するのかわかりませんmov。
writel()とにかく、メモリにデータを書き込むとき、使用とメモリへの直接書き込みの違いは何ですか **address = data;。
これがケースです:
static inline void __writel(__u32 val, volatile void __iomem *addr)
{
volatile __u32 __iomem *target = addr;
asm volatile("movnti %1,%0"
: "=m" (*target)
: "r" (val) : "memory");
}
これは別のケースです:
*(unsigned int*)(MappedAddr+pageOffset) = result;