如何以编程方式识别ARM板

How to identify ARM board programmatically

有没有办法以编程方式识别我目前运行在哪个臂板上? raspberry pi、cubieboard 还是 beagleboneblack?这3种足以区分。 我希望使用 cat /sys/devices/virtual/dmi/id/sys_vendor 但这在 debian 的 ARM 端口上不可用:-/

您可以阅读 MIDR 寄存器,它将提供实现者、变体、架构、零件号和修订版,您可能有助于区分您 运行 您的代码所在的板。

您可以使用 MRC p15, 0, <Rt>, c0, c0, 0

获取该寄存器

参考:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0500f/BABFEABI.html

在我的棋盘上,在 /proc/cpuinfo,我有

Processor       : ARMv7 Processor rev 7 (v7l)
processor       : 0
BogoMIPS        : 1562.98

processor       : 1
BogoMIPS        : 1560.01

Features        : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x2
CPU part        : 0xc09
CPU revision    : 7

Hardware        : FC7100 Workbench
Revision        : 6008

有趣的部分是 Hardware 字段,这是我的板的名称。此字段基于机器 ID,来自 arch/arm/tools/mach-type linux 文件。然而,这种方法现在可能已经过时了,因为我们现在使用设备树而不是板级支持包。您可能需要查找设备树文档以获取所需信息。

我写在Python.
我查看 /proc/cpuinfo 并解析出硬件字段。
BCM2708 是 Pi1 (A, B, A+,B+)
BCM2709 是 Pi2 (B+)
BCM2835 是一个 Pi3

对于 Beaglebone,您可以:

import platform
p = platform.platform()

如果以上任何一条为真,您就有了 Beaglebone Black。

if p.lower().find('arm7l-with-debian') > -1
if p.lower().find('arm7l-with-ubuntu') > -1
if p.lower().find('arm7l-with-glibc2.4') > -1
if p.lower().find('arm7l-with-arch') > -1

如果不是 RPi 也不是 Beaglebone,那么可能是另一个。

这是从 Adafruit 的 Tony DiCola 所做的工作中收集到的,但我不记得是在哪个项目中找到它的。