让 Raspberry Pi 4 完全运行在 64-bit 模式下

于是在我编译完 MongoDB Embedded 之后发现,虽然 Raspberry Pi 4 的 CPU 是 64-bit 的,但是默认使用的还是 32bit 的内核,userland 的程序也都是 32-bit 的。

自然,前一篇编译出来的 MongoDB Embedded 也是 32 bit 的,不过好在 MongoDB 的 Embedded 版本也不是我最终想要的。在这篇 post 搞好 Raspberry Pi 的 64 bit 环境之后,就可以编译一个正常的 MongoDB 了~

要让 Raspberry Pi 4 完全运行在 64 位模式下的话,有一个似乎简单的方法——安装 Manjaro,但是我不喜欢 Arch。

总体来说分如下几步~

  1. sudo rpi-update 获取 64-bit 的 kernel.img
  2. 修改 /boot/config.txt 指定 64-bit 模式启动
  3. schroot 一个完全的 64-bit 环境

1. sudo rpi-update 获取 64-bit 的 kernel.img

这一步十分简单,只需要执行如下命令即可,注意可能会询问是否要继续,按 y 即可~

sudo rpi-update

2. 修改 /boot/config.txt 指定 64-bit 模式启动

接下来修改 /boot/config.txt 文件,告诉 VideoCore 使用 64-bit 模式启动。

修改的内容也就是增加一行如下代码到 /boot/config.txt

arm_64bit=1

保存并重启 Raspberry Pi 之后,kernel 就是 64-bit 的了,我们也可以通过 uname -a 验证~

然而,此时 userland 其实还是 32-bit 的,因此需要一个完全的 64-bit 环境的话,还需要一点 hack

3. schroot 一个完全的 64-bit 环境

我们需要 debootstrap 来创建 Debian 的初始环境, schroot 创建一个虚拟环境~

sudo apt install -y debootstrap schroot

如果在国内的话,为了之后使用清华大学的镜像源,可能还需要 apt-transport-https

sudo apt install -y debootstrap schroot apt-transport-https

接下来给 schroot 创建一个该虚拟环境的描述文件

cat << EOF | sudo tee /etc/schroot/chroot.d/pi64
[pi64]
description=V3D arm64 testing
type=directory
directory=/srv/chroot/pi64
users=pi
root-groups=root
profile=desktop
personality=linux
preserve-environment=true
EOF

随后则可以使用 debootstrap 来初始化 debian 环境了~

sudo debootstrap --arch arm64 buster /srv/chroot/pi64

如果在国内的话,则可以加上清华大学的 debian 镜像源地址~

sudo debootstrap --arch arm64 buster /srv/chroot/pi64 https://mirrors.tuna.tsinghua.edu.cn/debian

在略显漫长的安装之后(因为会自动安装很多必要的软件包),/srv/chroot/pi64 下面就初始化好了一个 64-bit 的虚拟环境了~

下一步的话,则是先在那个虚拟环境里安装上 sudo,不然一会儿 pi 用户有权限却没有 sudo 可用 233333

sudo schroot -c pi64 -- apt install -y sudo

安装好 sudo 后,就只差一步 schroot 切换到 pi64 环境就完成啦~

schroot -c pi64

这个时候就跟平时使用 Raspberry Pi 一样,但已经是 64-bit 的环境了~

One thought on “让 Raspberry Pi 4 完全运行在 64-bit 模式下”

  1. 国内下载不下来,可以参考这个方法:https://github.com/Hexxeh/rpi-update/issues/253#issuecomment-349316545

Leave a Reply

Your email address will not be published. Required fields are marked *

three × 4 =