Die in /proc/cpuinfo enthaltenen Informationen bei der Verwendung eines arm64-Kernels enthalten weniger Informationen als die 32-Bit-Arm-Version, was dazu führt, dass das System nicht als Raspberry Pi erkannt wird, z. B. von der RPi.GPIO-Bibliothek.
Vor allem die fehlenden Hardware-/Revisionszeilen unterhalb der einzelnen CPUs scheinen Ärger zu machen, da sie zur Identifikation des jeweiligen Modells dienen.
Nach dem, was ich im Quellcode sehen kann, kommt die cpuinfo für arm64 von hier: https://github.com/raspberrypi/linux/blob/rpi-4.12.y/arch/arm64/kernel/cpuinfo.c , während für arm wird es in setup.c generiert (wäre https://github.com/raspberrypi/linux/blob/rpi-4.12.y/arch/arm64/kernel/setup.c für arm64).
Inhalt von /proc/cpuinfo mit dem arm64-Kernel:
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
... ... ...
Was ich erwartet habe (läuft auf einem 32-Bit-Arm-Kernel, seriell entfernt):
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
Zusätzliche Systeminformationen:
$ 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
Dieses Problem macht alle Rasberry Pi GPIO usw.-Skripte auf dieser Architektur unbrauchbar.
/proc/device-tree/system/linux,revision
und /proc/device-tree/system/linux,serial
verfügbar machen, mit menschenlesbaren Versionen in /proc/device-tree/model
und /proc/device-tree/serial-number
.Dies wird nicht behoben.
Ein einfacher, wenn auch nicht sehr eleganter Workaround dafür (ohne Patchen der Userspace-Bibliotheken oder des Kernels) besteht darin, bei Bedarf eine Faux-Version von /proc/cpuinfo
einzubinden; siehe zum Beispiel meinen Beitrag hier .
Beim rpi-4.19.y
Kernel reicht dies aus, um zB die picamera
Lib zum Laufen zu bringen (siehe zB hier (64-Bit-Kernel, 32-Bit-Raspbian-Userspace in diesem Fall)) und wird iirc erlauben ein 64-Bit-Build von wiringpi
zum Ausführen OK (64-Bit-Kernel, 64-Bit-Benutzerbereich). YMMV.
Sie können zB einen Mount-Namespace für Ihre Ziel-App verwenden, um zu verhindern, dass sich dieser Workaround auf den Rest Ihres Systems auswirkt (obwohl die meisten gut erzogenen 64-Bit-Userland-Sachen ohnehin den Gerätebaum überprüfen, anstatt
/proc/cpuinfo
, und so scheint egal zu sein ^-^).
hth,
sakaki
Hilfreichster Kommentar
Ein einfacher, wenn auch nicht sehr eleganter Workaround dafür (ohne Patchen der Userspace-Bibliotheken oder des Kernels) besteht darin, bei Bedarf eine Faux-Version von
/proc/cpuinfo
einzubinden; siehe zum Beispiel meinen Beitrag hier .Beim
rpi-4.19.y
Kernel reicht dies aus, um zB diepicamera
Lib zum Laufen zu bringen (siehe zB hier (64-Bit-Kernel, 32-Bit-Raspbian-Userspace in diesem Fall)) und wird iirc erlauben ein 64-Bit-Build vonwiringpi
zum Ausführen OK (64-Bit-Kernel, 64-Bit-Benutzerbereich). YMMV.hth,
sakaki