c - Linux/ARM 上 LDREX/STREX 可用性的运行时检测

标签 c linux arm atomic

是否有任何可靠(最好没有误报和误报)的方法来检测 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/

相关文章:

c++ - TIM6,基本时间生成功能不起作用

c++ - arm 汇编代码 - 了解 cpp 源代码的反汇编

rust - Rust 中的裸机自旋锁实现

c - 除法结果始终为零

c - 寄存器如何作为汇编中的参数工作?

c - 如何使用fgets读取和统计字符

android - 什么是 ELF 二进制文件中的 .init_array 部分?

linux - Unix/Linux终端,如何显示特定字母后跟其他字母?

linux - 我们如何从当前终端打开 minicom 并传递多个命令来执行并使用 shell 脚本退出到第一个终端

linux - 为什么我不能 `mv` 没有额外写入权限的目录