微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

在Linux / ARM上有没有可靠的(最好没有假阴性和假阳性)方法来检测运行时LDREX / STREXprimefaces操作的可用性? 我在auxvector的AT_HWCAP字段中查找了一些东西,发现了一些可能间接暗示可用性的东西(例如, HWCAP_LPAE可能HWCAP_LPAE ),但它们可能会有误报。

ARM如何在IRQ处理程序中切换到svc模式?

ARM Linux引导的一些细节

Linux内核空闲循环

如何debuggingARM Linux内核(msleep())locking?

在写入/ dev / mem时,是否真的需要msync?

LDREX / STREX是在ARMv6架构中引入的,所以你只需要检查架构版本 – 如果是v6或更高版本,你就可以拥有它们。 如果没有,你不这样做。 从特权代码你可以直接读取MIDR,否则一些用户空间接口,如/proc/cpuinfo 。

如果你真的需要实现在所有体系结构版本中工作的原子,你可能最好依靠由coreel User助手提供的cmpxchg ,而不是试图推出你自己的。

Mpcore,TRM不会说如果你可以或不能访问这在一个非priveledged模式。

MRC p15,<Rd>,c0,0; reads Main ID register

cpu id注册了一些之后明确地说:仅在特权模式下可访问所以我希望/假设arm文档会说主要id注册相同的事情。 当然有多少主要的注册答案,你必须通过核实这是什么核心?

嗯,MIDR =主要ID注册,Notlikethat提到的MIDR,我想这是一个简单的测试,看看你是否可以在用户模式下访问MIDR …

编辑:

1176明确说明了MIDR。

只能在特权模式下访问。

我想知道这个限制是否消失了。

EDIT2:

在mpcore上验证,您无法在用户模式下访问MIDR。

EDIT3:

我认为你必须依靠内核来帮助用户空间。 和/或如果你只支持ARMv6或更新版本,那么ldrex / strex将在那里,你不必检查,假设这不是运行在cortex-m上,而是运行在arm11或cortex-a / r上。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐