ARM Linux上用户应用程序访问协处理器是否有标准方式?

3
我想知道是否已经有一个已实现(普遍-标准)的“驱动程序/内核模块/sysfs条目”方式来通过用户空间访问ARM的协处理器。 如果没有(据我所知),为什么它不可用? 有什么阻碍它吗? 它不可行吗?
例如; 我想要获取Main ID Register - MIDR的内容,我希望能够通过写入/读取sysfs条目来从用户空间执行此操作。

/proc/cpuinfo 包含了所有你可以从 MIDR 中获取的信息,尽管它是为人类消费而优化的。你打算用这个值做什么用途? - unixsmurf
要访问我想要的任何协处理器寄存器。MIDR只是一个例子。如果您想查看分支预测器是否已启用会发生什么?(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0388h/BABDHHGI.html) - auselen
MIDR是一个寄存器,它不会提供用户空间应用程序有用的信息(而hwcaps可能会提供)。如果您的分支预测器未启用,则您的内核基本上已经损坏了。 - unixsmurf
1个回答

4
通常将这种复杂的硬件连接暴露给应用程序是个不好的主意 - 它会破坏可移植性并可能影响安全性和稳定性(这就是为什么它们一开始就不能从非特权模式访问)。 这些东西通常最好隐藏在一些软件抽象层后面。 但如果确实存在真正的原因,那么您可以编写内核驱动程序来公开此类接口。
如果您的问题纯粹出于好奇心,请建立自己的内核,然后使用类似KGDB的工具在启动时进行调查,或者在关键位置插入printk语句以查看某些值在特定时间点的情况。

通过sysfs权限可以控制访问。假设你想读取一些硬件性能计数器,你需要为此编写一个模块。如果用户空间应用程序可以访问它们,那么将它们用于各种性能基准测试会更有用吧?当然,你可以谈论一个库来完成这个工作,但即便是那个库也需要一个模块,并且需要使用正确版本的Linux进行编译... - auselen
如果您想在Linux下使用硬件性能计数器,那么最好的方法是使用perf框架 - 而不是将hw计数器暴露给用户空间,因为用户空间无法告知何时被上下文切换或防止其他进程覆盖其性能计数器配置。话虽如此,具体而言,性能计数器有一个配置选项,可以设置为允许非特权软件进行配置。但这只在操作系统没有以其他方式公开计数器的情况下才有(微小的)意义。 - unixsmurf
(一些其他参数)你可以通过/dev/mem访问所有物理内存,这就是我所说的访问方式。 - auselen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接