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;