使用 arm64 内核时,/proc/cpuinfo 中包含的信息比 32 位 arm 版本包含的信息少,导致系统无法识别为 Raspberry Pi,例如 RPi.GPIO 库。
特别是,单个 CPU 下方缺少的硬件/修订版行似乎会引起问题,因为它们被用于识别特定型号。
从我在源代码中看到的,对于 arm64,cpuinfo 来自这里: https :
arm64内核的/proc/cpuinfo的内容:
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 将允许wiringpi
的 64 位版本运行正常(64 位内核,64 位用户空间)。 天啊。
您可以为目标应用程序使用例如挂载命名空间来防止此解决方法影响系统的其余部分(尽管大多数表现良好的 64 位用户空间似乎无论如何都会检查设备树,而不是
/proc/cpuinfo
,等等似乎不在乎^-^)。
嗯,
咲
最有用的评论
一个简单但不是很优雅的解决方法(不修补用户空间库或内核)是在需要时绑定挂载一个
/proc/cpuinfo
的虚假版本; 例如参见我的文章在这里。使用
rpi-4.19.y
内核,这足以让picamera
lib 工作(参见例如此处(64 位内核,在这种情况下为 32 位 Raspbian 用户空间)),并且 iirc 将允许wiringpi
的 64 位版本运行正常(64 位内核,64 位用户空间)。 天啊。嗯,
咲