我正在阅读 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;