是否有任何可靠(最好没有误报和误报)的方法来检测 Linux/ARM 上运行时 LDREX
/STREX
原子操作的可用性?我在 aux vector 的 AT_HWCAP
字段中查找了一些内容,并发现了一些可能间接暗示可用性的内容(例如 HWCAP_LPAE
据说如此),但它们可能有 false底片。
最佳答案
LDREX
/STREX
是在 ARMv6 架构中引入的,因此您只需检查架构版本 - 如果是 v6 或更高版本,您就有它们。如果没有,你就不会。从特权代码中,您可以直接读取 MIDR,否则可以读取一些用户空间接口(interface),例如 /proc/cpuinfo
。
如果您确实需要实现适用于所有架构版本的原子,那么您最好依赖 Kernel User helpers 提供的 cmpxchg
而不是尝试自己推出。
关于c - Linux/ARM 上 LDREX/STREX 可用性的运行时检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22671501/