تحتوي المعلومات الواردة في / proc / cpuinfo أثناء استخدام نواة arm64 على معلومات أقل من إصدار arm 32 بت ، مما يؤدي إلى عدم التعرف على النظام باعتباره Raspberry Pi ، على سبيل المثال بواسطة مكتبة RPi.GPIO.
على وجه الخصوص ، يبدو أن خطوط الأجهزة / المراجعة المفقودة أسفل وحدات المعالجة المركزية الفردية تسبب مشكلة ، حيث يتم استخدامها لتحديد طراز معين.
مما يمكنني رؤيته في الكود المصدري ، بالنسبة لـ arm64 ، تأتي معلومات وحدة المعالجة المركزية من هنا: 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 بت ، تمت إزالة المسلسل):
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
kernel ، هذا كافٍ للحصول على سبيل المثال على picamera
lib (انظر على سبيل المثال هنا (64 بت kernel ، مساحة مستخدمي Raspbian 32 بت في هذه الحالة)) ، وسوف تسمح iirc إصدار 64 بت من wiringpi
لتشغيل OK (نواة 64 بت ، مساحة مستخدمين 64 بت). YMMV.
يمكنك استخدام ، على سبيل المثال ، مساحة اسم تحميل لتطبيقك المستهدف لمنع هذا الحل البديل من التأثير على بقية النظام (على الرغم من أن معظم عناصر userland ذات 64 بت حسن التصرف يبدو أنها تتحقق من شجرة الأجهزة على أي حال ، بدلاً من
/proc/cpuinfo
، وهكذا لا يبدو أنه يهتم ^ - ^).
ح
ساكاكي
التعليق الأكثر فائدة
الحل البسيط ، على الرغم من أنه ليس أنيقًا للغاية ، لهذا (بدون تصحيح مكتبات مساحة المستخدمين أو النواة) هو ربط نسخة زائفة من
/proc/cpuinfo
عند الحاجة ؛ انظر على سبيل المثال رسالتي هنا .مع
rpi-4.19.y
kernel ، هذا كافٍ للحصول على سبيل المثال علىpicamera
lib (انظر على سبيل المثال هنا (64 بت kernel ، مساحة مستخدمي Raspbian 32 بت في هذه الحالة)) ، وسوف تسمح iirc إصدار 64 بت منwiringpi
لتشغيل OK (نواة 64 بت ، مساحة مستخدمين 64 بت). YMMV.ح
ساكاكي