Информация, содержащаяся в / proc / cpuinfo при использовании ядра arm64, содержит меньше информации, чем 32-разрядная версия arm, что приводит к тому, что система не распознается как Raspberry Pi, например, библиотекой RPi.GPIO.
В частности, недостающие строки оборудования / версии под отдельными процессорами, похоже, вызывают проблемы, поскольку они используются для идентификации конкретной модели.
Из того, что я вижу в исходном коде, для arm64 cpuinfo берется отсюда: https://github.com/raspberrypi/linux/blob/rpi-4.12.y/arch/arm64/kernel/cpuinfo.c , а для arm создается в setup.c (будет https://github.com/raspberrypi/linux/blob/rpi-4.12.y/arch/arm64/kernel/setup.c для arm64).
Содержимое / proc / cpuinfo с ядром arm64:
processor : 0
BogoMIPS : 38.40
Features : fp asimd evtstrm crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
... ... ...
Что я ожидал (работает на 32-битном ядре ARM, серийный номер удален):
processor : 0
model name : ARMv7 Processor rev 4 (v7l)
BogoMIPS : 38.40
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
... ... ...
Hardware : BCM2709
Revision : a22082
Serial : 00000000XXXXXXXX
Дополнительная системная информация:
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=debian
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
HYPRIOT_OS="HypriotOS/arm64"
HYPRIOT_OS_VERSION="v1.1.1"
HYPRIOT_DEVICE="Raspberry Pi 3 64bit"
HYPRIOT_IMAGE_VERSION="v20170303-185520"
$ uname -a
Linux black-pearl 4.9.13-bee42-v8 #1 SMP PREEMPT Fri Mar 3 16:42:37 UTC 2017 aarch64 GNU/Linux
Эта проблема делает непригодными для использования на этой архитектуре все сценарии Rasberry Pi GPIO и т. Д.
/proc/device-tree/system/linux,revision
и /proc/device-tree/system/linux,serial
с удобочитаемыми версиями в /proc/device-tree/model
и /proc/device-tree/serial-number
.Это не исправить.
Простой, хотя и не очень элегантный обходной путь для этого (без исправления библиотек пользовательского пространства или ядра) состоит в том, чтобы связать-монтировать поддельную версию /proc/cpuinfo
когда это необходимо; см. например мой пост здесь .
С ядром rpi-4.19.y
этого достаточно, например, чтобы заставить работать picamera
lib (см., Например, здесь (64-битное ядро, 32-битное пользовательское пространство Raspbian в этом случае)), и позволит ли iirc 64-битная сборка wiringpi
для нормальной работы (64-битное ядро, 64-битное пространство пользователя). YMMV.
Вы можете использовать, например, пространство имен монтирования для вашего целевого приложения, чтобы этот обходной путь не повлиял на остальную часть вашей системы (хотя большинство корректных 64-битных пользовательских вещей, похоже, в любом случае проверяют дерево устройств, а не
/proc/cpuinfo
, и т. похоже, это не волнует ^ - ^).
hth,
сакаки
Самый полезный комментарий
Простой, хотя и не очень элегантный обходной путь для этого (без исправления библиотек пользовательского пространства или ядра) состоит в том, чтобы связать-монтировать поддельную версию
/proc/cpuinfo
когда это необходимо; см. например мой пост здесь .С ядром
rpi-4.19.y
этого достаточно, например, чтобы заставить работатьpicamera
lib (см., Например, здесь (64-битное ядро, 32-битное пользовательское пространство Raspbian в этом случае)), и позволит ли iirc 64-битная сборкаwiringpi
для нормальной работы (64-битное ядро, 64-битное пространство пользователя). YMMV.hth,
сакаки