树莓派很早就支持64位操作系统了,只是近几年Raspberry Pi OS才发布arm64版本。
虽然笔者的树莓派4b内存是4GB,理论上没有必要升级64位,但既然是折腾,那就不嫌麻烦,干就完了。
新的风扇
之前笔者的树莓派安装了金属散热外壳和风扇,由于常年运转,风扇受损,噪音极大。
笔者不堪其扰,更换风扇,加装防护网,档次有所提升。
从32位切换到ARM64
执行uname -a
指令查看linux版本。
$ uname -a
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux
上面的输出结果不是笔者树莓派的输出,笔者撰写本文时树莓派已经升级到64位。
切换
想要升级到64位系统,可以重刷系统,从做sd卡开始。笔者的树莓派上运行了一些常用服务(代理、校园网认证、邮件发送ip等),重新配置比较麻烦。
树莓派官方在系统里提供了64位的镜像。执行指令ls /boot
查看boot
分区的文件。
$ ls /boot
bcm2708-rpi-b.dtb bcm2711-rpi-cm4.dtb kernel7.img
bcm2708-rpi-b-plus.dtb bootcode.bin kernel7l.img
bcm2708-rpi-b-rev1.dtb cmdline.txt kernel8.img
bcm2708-rpi-cm.dtb config.txt kernel.img
bcm2708-rpi-zero.dtb COPYING.linux LICENCE.broadcom
bcm2708-rpi-zero-w.dtb fixup4cd.dat overlays
bcm2709-rpi-2-b.dtb fixup4.dat start4cd.elf
bcm2710-rpi-2-b.dtb fixup4db.dat start4db.elf
bcm2710-rpi-3-b.dtb fixup4x.dat start4.elf
bcm2710-rpi-3-b-plus.dtb fixup_cd.dat start4x.elf
bcm2710-rpi-cm3.dtb fixup.dat start_cd.elf
bcm2710-rpi-zero-2.dtb fixup_db.dat start_db.elf
bcm2710-rpi-zero-2-w.dtb fixup_x.dat start.elf
bcm2711-rpi-400.dtb initrd.img-4.19.75-v7l+-overlay start_x.elf
bcm2711-rpi-4-b.dtb issue.txt 'System Volume Information'
注意到其中的kernel8.img
就是64位镜像。
修改/boot/config.txt
使操作系统默认64位启动。在最后添加一行arm_64bit=1
和一行kernel=kernel8.img
。
# file: /boot/config.txt
...
[all]
dtoverlay=vc4-fkms-v3d
enable_uart=1
start_x=1
gpu_mem=256
arm_64bit=1
kernel=kernel8.img
完成之后重启。
sudo reboot 0
开启32位兼容和软件源更新
正常来说重启之后就是64位系统了。
$ uname -a
Linux raspberrypi 5.10.103-v8+ #1529 SMP PREEMPT Tue Mar 8 12:26:46 GMT 2022 aarch64 GNU/Linu
为了能运行32位程序,需要开启兼容。
dpkg --add-architecture armhf
之前的软件源设置的是32位的,现在更换到64位。参考清华大学开源镜像站的教程。
修改完成之后更新。
sudo apt update
sudo apt upgrade
问题
在升级到64位之后执行如下指令。
$ getconf LONG_BIT
32
可以看到,系统仍然是32位的。为了进一步测试,编写如下C语言代码并编译执行。
#include <stdio.h>
int main() {
printf("%ld\n", sizeof(size_t));
return 0;
}
输出结果为4,即4字节。
在查阅相关资料后,笔者发现修改/boot/config.txt
的方法虽然能将内核切换到64位,但用户态下仍然是32位。
树莓派论坛里对这种操作的评价是“不是个好主意”。
No. That only changes the kernel. The rest of the OS is still 32-bit.
结论
想要完全切换到64位系统,重刷SD卡不可避免。
拓展阅读
修改为64位:笔记:把树莓派4B系统修改为64位
修改为64位:把32位树莓派改位64位
切换为64位:树莓派4b切换64位系统
开启32位兼容:树莓派64位系统开启32位兼容
修改软件源:Raspbian 镜像使用帮助
升级到64位:Is it possible to update Raspbian 32bit with the 64bit beta without erasing the SD card?