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