As informações contidas em / proc / cpuinfo durante o uso de um kernel arm64 contêm menos informações do que a versão arm de 32 bits, fazendo com que o sistema não seja reconhecido como Raspberry Pi, por exemplo, pela biblioteca RPi.GPIO.
Especialmente, as linhas de Hardware / Revisão ausentes abaixo das CPUs individuais parecem causar problemas, pois estão sendo usadas para a identificação do modelo específico.
Pelo que posso ver no código-fonte, para arm64 o cpuinfo vem daqui: https://github.com/raspberrypi/linux/blob/rpi-4.12.y/arch/arm64/kernel/cpuinfo.c , enquanto para arm é gerado em setup.c (seria https://github.com/raspberrypi/linux/blob/rpi-4.12.y/arch/arm64/kernel/setup.c para arm64).
Conteúdo de / proc / cpuinfo com o 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
... ... ...
O que eu esperava (executando em um kernel arm de 32 bits, serial removido):
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
Informações adicionais do 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 torna todos os scripts Rasberry Pi GPIO etc. inutilizáveis nesta arquitetura.
/proc/device-tree/system/linux,revision
e /proc/device-tree/system/linux,serial
, com versões legíveis por humanos em /proc/device-tree/model
e /proc/device-tree/serial-number
.Isso não vai consertar.
Uma solução simples, embora não muito elegante, para isso (sem corrigir as bibliotecas de espaço de usuário ou kernel) é montar uma versão falsa de /proc/cpuinfo
quando necessário; veja por exemplo meu post aqui .
Com o kernel rpi-4.19.y
, isso é suficiente para, por exemplo, fazer com que picamera
lib funcione (veja, por exemplo, aqui (kernel de 64 bits, espaço de usuário Raspbian de 32 bits neste caso)), e irá permitir uma compilação de 64 bits de wiringpi
para executar OK (kernel de 64 bits, espaço de usuário de 64 bits). YMMV.
Você pode usar, por exemplo, um namespace de montagem para seu aplicativo de destino para evitar que esta solução alternativa afete o resto do seu sistema (embora a maioria das coisas de userland de 64 bits bem comportadas pareçam verificar a árvore do dispositivo de qualquer forma, em vez de
/proc/cpuinfo
, e assim não parece se importar ^ - ^).
hth,
Sakaki
Comentários muito úteis
Uma solução simples, embora não muito elegante, para isso (sem corrigir as bibliotecas de espaço de usuário ou kernel) é montar uma versão falsa de
/proc/cpuinfo
quando necessário; veja por exemplo meu post aqui .Com o kernel
rpi-4.19.y
, isso é suficiente para, por exemplo, fazer com quepicamera
lib funcione (veja, por exemplo, aqui (kernel de 64 bits, espaço de usuário Raspbian de 32 bits neste caso)), e irá permitir uma compilação de 64 bits dewiringpi
para executar OK (kernel de 64 bits, espaço de usuário de 64 bits). YMMV.hth,
Sakaki