Есть ли способ программно определить, на какой доске я сейчас работаю? Либо raspberry pi, либо cubieboard, либо beagleboneblack? Этих 3-х типов достаточно для дифференциации. Я надеялся использовать cat /sys/devices/virtual/dmi/id/sys_vendor
, но это недоступно в ARM-портах Debian :-/
Как программно идентифицировать плату ARM
Ответы (3)
На моей плате в /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
, которое является названием моей доски. Это поле основано на идентификаторе машины из linux-файла arch/arm/tools/mach-type. Тем не менее, этот подход сейчас может быть устаревшим, так как теперь мы используем деревья устройств вместо пакетов поддержки плат. Возможно, вам придется поискать документацию по дереву устройств, чтобы получить необходимую информацию.
Вы можете прочитать MIDR
register, который предоставит исполнителя, вариант, архитектуру, номер детали и версию, которые помогут вам различать доски, на которых вы запускаете свой код.
Вы можете получить этот регистр, используя MRC p15, 0, <Rt>, c0, c0, 0
Ссылка: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0500f/BABFEABI.html
Я пишу на Python.
Я просматриваю /proc/cpuinfo и анализирую поле Hardware.
BCM2708 — это Pi1 (A, B, A+,B+)
BCM2709 — это Pi2 (B+)
BCM2835 — это Pi3
Для Бигльбона вы можете:
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, но я не помню, в каком проекте я это нашел.