树莓派4B使用arm64系统踩坑
背景
由于工作原因,需要一台 arm64 的服务器测试一些功能。但是目前这个点没法快速采购到腾讯云或者百度云的arm服务器(这俩公司的arm服务器好像都只是在内测阶段,据说得2022年初才能 Release)。想了一圈发现树莓派似乎正好有 arm64 的cpu,于是去官网确认了下 Specification:
Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz
看起来挺好的,于是在亚博智能店里买了个 4B ,但是买到后跑起来发现竟然不是 arm64 的,大呼上当。不过仔细一研究发现原来是原装的 Raspberry os 镜像使用的是 armhf 内核(即支持hard float 的32位 arm )。而树莓派官方其实在 2020 年已经发布了支持 arm64 内核的镜像了,参见这个 Reddit 讨论。同时也发现 arm64 的系统相比 armhf 其实也更能发挥64位cpu的能力。
既然如此,那就搞起来吧。
方案
网上冲浪了一把,发现基本有俩套解决方案:
- 修改 /boot/config.txt 的 arm_64bit 配置(参考官方配置文档)。
- 重新刷入 arm64 位的镜像。
方案1看起来更方便,方案2看起来更稳妥,于是我挨个试了下。为了验证系统架构的正确性,我也准备了几个测试方法:
uname -a
cat /proc/cpuinfo
getconf LONG_BIT
file /bin/bash
cat /proc/version
dpkg --print-architecture
验证
原始环境配置
首先看一下原版基于 raspios_armhf-2020-05-28 的镜像下的配置情况。
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.10.63-v7l+ #1496 SMP Wed Dec 1 15:58:56 GMT 2021 armv7l GNU/Linux
pi@raspberrypi:~ $ cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
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 : 0xd08
CPU revision : 3
processor : 1
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
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 : 0xd08
CPU revision : 3
processor : 2
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
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 : 0xd08
CPU revision : 3
processor : 3
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
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 : 0xd08
CPU revision : 3
Hardware : BCM2711
Revision : d03114
Serial : 10000000b6d307b2
Model : Raspberry Pi 4 Model B Rev 1.4
pi@raspberrypi:~ $ getconf LONG_BIT
32
pi@raspberrypi:~ $ file /bin/bash
/bin/bash: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=3e5e2847bbc51da2ab313bc53d4bdcff0faf2462, stripped
pi@raspberrypi:~ $ cat /proc/version
Linux version 5.10.63-v7l+ (dom@buildbot) (arm-linux-gnueabihf-gcc-8 (Ubuntu/Linaro 8.4.0-3ubuntu1) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #1496 SMP Wed Dec 1 15:58:56 GMT 2021
pi@raspberrypi:~ $ dpkg --print-architecture
armhf
基本符合预期,唯一让我一开始比较意外的就是 /proc/cpuinfo 里的 Model Name 是 ARMv7 Processor rev 3 (v7l),和官方声称的 ARM v8 并不一致。后来才明白原来这个值也是跟系统内核有关的,有时并不能真正准确的表达真是硬件的属性。这个镜像下的系统的确是32位arm无疑了。
修改环境配置
参照官网配置文档,将 /boot/config.txt 中的 arm64_bit 置位1,重启后重新进行下检测。
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.10.63-v8+ #1496 SMP PREEMPT Wed Dec 1 15:59:46 GMT 2021 aarch64 GNU/Linux
pi@raspberrypi:~ $ cat /proc/cpuinfo
processor : 0
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3
processor : 1
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3
processor : 2
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3
processor : 3
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3
Hardware : BCM2835
Revision : d03114
Serial : 10000000b6d307b2
Model : Raspberry Pi 4 Model B Rev 1.4
pi@raspberrypi:~ $ getconf LONG_BIT
32
pi@raspberrypi:~ $ file /bin/bash
/bin/bash: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=3e5e2847bbc51da2ab313bc53d4bdcff0faf2462, stripped
pi@raspberrypi:~ $ cat /proc/version
Linux version 5.10.63-v8+ (dom@buildbot) (aarch64-linux-gnu-gcc-8 (Ubuntu/Linaro 8.4.0-3ubuntu1) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #1496 SMP PREEMPT Wed Dec 1 15:59:46 GMT 2021
pi@raspberrypi:~ $ dpkg --print-architecture
armhf
结果有点出乎意料。
通过内核版本查看的cpu架构基本都能正确展示出 aarch64 的关键字,但是其实系统中除了内核之外的其他软件仍然是 32 位的版本(毕竟只是更新了内核)。而且 dpkg 默认使用的软件架构仍然是 32 位的。这意味着当前系统其实有点四不像,既有64位的东西,又有32位的东西,不用想就知道以后100%会踩坑。
同时注意到,刷了新内核之后,cpuinfo 展示硬件信息为 Hardware : BCM2835
,而原来的硬件信息却是Hardware : BCM2711
。在 gadgetversus 里对比了一下两种芯片:
虽然 2835>2711,但其实是变成了个老版本,真的是闹不明白。。。后来在官方论坛上瞅了瞅,才发现树莓派的软件总监说这好像是因为实际上存在多个芯片类型,但是为了一些上下游兼容的逻辑,就展示了一个错的。。。
顺带吃一个瓜:
mmuaa同学在博客里分享了他的方法。pingwei同学照着弄死机了,也写了个博客,然后还去mmuaa同学的博客下面喷粪,笑死了。
重新刷入镜像
四不像的系统肯定是不要用的,于是就去官网下了Imager,又去清华镜像站里下了 最新的基于 buster (ubuntu 18.04 , debian 10) 的arm64位镜像,烧进TF卡里。装机成功后验证了下数据。
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.10.17-v8+ #1414 SMP PREEMPT Fri Apr 30 13:23:25 BST 2021 aarch64 GNU/Linux
pi@raspberrypi:~ $ cat /proc/cpuinfo
processor : 0
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3
processor : 1
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3
processor : 2
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3
processor : 3
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3
Hardware : BCM2835
Revision : d03114
Serial : 10000000b6d307b2
Model : Raspberry Pi 4 Model B Rev 1.4
pi@raspberrypi:~ $ getconf LONG_BIT
64
pi@raspberrypi:~ $ file /bin/bash
/bin/bash: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=b11533bde88bb45ef2891fbf3ad86c1869ed3a41, stripped
pi@raspberrypi:~ $ cat /proc/version
Linux version 5.10.17-v8+ (dom@buildbot) (aarch64-linux-gnu-gcc-8 (Ubuntu/Linaro 8.4.0-3ubuntu1) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #1414 SMP PREEMPT Fri Apr 30 13:23:25 BST 2021
pi@raspberrypi:~ $ dpkg --print-architecture
arm64
这下终于统一都是 arm64 的了,虽然 cpuinfo 还是显示的是老的芯片信息(BCM2835),不过毕竟没啥太大影响。
剩下需要注意的就是,在配置新的apt源的时候,/etc/apt/sources.list
直接配置 debian 10 的镜像即可,不要用 raspberrypi 的镜像了;/etc/apt/sources.list.d/raspi.list
里再配置下 raspberrypi 的特定源即可。
相关文章
- 第四章.监控系统-zabbix网站监控WEB
- android进阶之了解Android系统与开机过程
- 树莓派 | Raspberry Pi 4B使用nginx+sqlite3+php7.3+typecho搭建轻量级博客系统
- 使用瑞星安全保障Linux系统(瑞星forlinux)
- 深入Linux系统:查询用户组(linux查询用户组)
- Linux系统使用FTP达到最高连接数(linuxftp连接数)
- Linux df 命令:揭示系统磁盘容量与使用情况(linuxdf命令)
- 一步步教你在Linux系统上安装Sass(linux安装sass)
- 在Linux系统上使用GSview(gsviewlinux)
- Linux轻松同步系统时间(linux同步系统时间)
- 极速体验:使用树莓派3的Linux系统(树莓派3linux)
- Linux安装NS2系统指南(linux安装ns2)
- 关闭Linux系统的防火墙(关闭linux的防火墙)
- 使用 Ansible 在树莓派上构建一个基于 Linux 的高性能计算系统
- 在 CentOS/RHEL 系统上生成补丁合规报告的 Bash 脚本
- 条件语句if在Linux系统中的使用(linux下if)
- 的使用深入Linux系统:使用ADB控制设备(linux下adb)
- Linux 自由:使用Free命令让系统获得更多自由(linuxfree命令)
- 使用Oracle授权系统实现数据库安全(oracle系统授权)
- 如何使用Linux系统进行还原(linux怎么还原)
- 如何在Linux系统中进行内核交叉编译? How to CrossCompile Linux Kernel on Linux System?(linux内核交叉编译)
- 保护你的Linux系统:使用杀毒软件(linux系统杀毒)
- Linux 系统下修改密码的快捷脚本(linux 修改密码脚本)
- 掌握Linux系统硬件要求,提高效率(linux系统硬件要求)
- 深入了解Linux:探索最新操作系统的优势与特点(对linux系统的认识)
- Linux系统下使用PDF文件的方法(linux pdf 打开)
- 利用Redis提升系统性能(使用redis做什么)
- 使用命令行连接Redis哨兵系统(命令行访问redis哨兵)