gpt4 book ai didi

memory - 直接向内存写入数据和使用asm指令的区别

转载 作者:行者123 更新时间:2023-12-01 15:11:33 25 4
gpt4 key购买 nike

我正在阅读 Linux 内核。我很好奇在内存中写入数据的方式。

在驱动程序的某些部分,他们使用 asm/io.h 中定义的 writel() 函数,并且在该函数的定义中,他们使用 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;

最佳答案

writel 看起来它是为内存映射 IO 而设计的,有一些东西可以支持它,首先是 volatile 指针的使用(它可以防止重新排序等优化调用或优化它们)和非临时指令(不应缓存 IO 写入/读取),当然 iomem 注释似乎也支持这一点。

关于memory - 直接向内存写入数据和使用asm指令的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17693354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com