La información contenida en / proc / cpuinfo mientras se usa un kernel arm64 contiene menos información que la versión arm de 32 bits, lo que hace que el sistema no sea reconocido como Raspberry Pi, por ejemplo, por la biblioteca RPi.GPIO.
Especialmente, las líneas de revisión / hardware que faltan debajo de las CPU individuales parecen causar problemas, ya que se utilizan para identificar el modelo específico.
Por lo que puedo ver en el código fuente, para arm64 la cpuinfo viene de aquí: https://github.com/raspberrypi/linux/blob/rpi-4.12.y/arch/arm64/kernel/cpuinfo.c , mientras que para arm se genera en setup.c (sería https://github.com/raspberrypi/linux/blob/rpi-4.12.y/arch/arm64/kernel/setup.c para arm64).
Contenido de / proc / cpuinfo con el kernel 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
... ... ...
Lo que esperaba (ejecutándose en un kernel de brazo de 32 bits, serial eliminado):
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
Información adicional del sistema:
$ 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
Este problema hace que todos los scripts de Rasberry Pi GPIO, etc., sean inutilizables en esta arquitectura.
/proc/device-tree/system/linux,revision
y /proc/device-tree/system/linux,serial
, con versiones legibles por humanos en /proc/device-tree/model
y /proc/device-tree/serial-number
.Esto es algo que no se solucionará.
Una solución simple, aunque no muy elegante, para esto (sin parchear las bibliotecas del espacio de usuario o el kernel) es montar en enlace una versión falsa de /proc/cpuinfo
cuando sea necesario; mira, por ejemplo, mi publicación aquí .
Con el kernel rpi-4.19.y
, esto es suficiente para, por ejemplo, hacer que funcione picamera
lib (ver, por ejemplo, aquí (kernel de 64 bits, espacio de usuario de Raspbian de 32 bits en este caso)), y iirc permitirá una compilación de 64 bits de wiringpi
para ejecutar correctamente (kernel de 64 bits, espacio de usuario de 64 bits). YMMV.
Puede usar, por ejemplo, un espacio de
/proc/cpuinfo
, y así no parece importarle ^ - ^).
hth,
sakaki
Comentario más útil
Una solución simple, aunque no muy elegante, para esto (sin parchear las bibliotecas del espacio de usuario o el kernel) es montar en enlace una versión falsa de
/proc/cpuinfo
cuando sea necesario; mira, por ejemplo, mi publicación aquí .Con el kernel
rpi-4.19.y
, esto es suficiente para, por ejemplo, hacer que funcionepicamera
lib (ver, por ejemplo, aquí (kernel de 64 bits, espacio de usuario de Raspbian de 32 bits en este caso)), y iirc permitirá una compilación de 64 bits dewiringpi
para ejecutar correctamente (kernel de 64 bits, espacio de usuario de 64 bits). YMMV.hth,
sakaki