树莓派4 USB启动Ubuntu 20.04

了解如何在Raspberry Pi 4上通过USB引导Ubuntu Server20.04。SD卡非常缓慢,并且容易出现数据损坏和故障。 通过升级到SSD驱动器来解决所有这些问题!

嘿伙计。在今天的指南中,我将向您展示如何在Raspberry Pi 4上通过USB引导Ubuntu 20.04。

请记住,这将需要手动编辑文件并使用Raspberry Pi固件的master分支中的文件。另外,本指南还针对Linux和Mac用户量身定制。

因此,让我们开始吧。

更新固件以支持USB引导

首先,您需要确保Raspberry Pi 4支持USB Booting。为此,您必须在SD卡上安装Raspbian并更新固件。为此,请参考此视频。您将需要观看大约7:56左右他验证引导加载程序已更新的部分。如果您已经更新了引导加载程序,请跳至下一步。

下载64位版本的Ubuntu Server

现在,我们需要下载用于Raspberry Pi 4的64位版本的Ubuntu Server。然后,我们将使用Raspberry Pi Imager将映像刷新到SSD中。

访问Ubuntu Raspberry Pi下载页面,获取RP4的64位版本。

将镜像写入SSD

下载我们的映像后,我们需要安装Raspberry Pi Imager。访问“ Raspberry Pi下载”页面并将其安装在您的计算机上。

接下来打开成像器。单击“Choose OS”并找到您新下载的Ubuntu Server映像。之后,单击“Choose SD Card”,然后选择您的SSD硬盘。最后,单击“写入”,然后等待该过程完成。

在SSD上挂载系统引导分区
现在,我们需要在SSD驱动器上挂载系统引导分区,以进行一些更改。

sudo mkdir /mnt/ssdboot
sudo mount /dev/sdb1 /mnt/ssdboot
cd /mnt/ssdboot

解压内核

重要:每次ubuntu更新内核时,都必须重新运行此步骤。

首先,我们将把vmlinuz文件解压缩到vmlinux中。 这是因为当前不支持从压缩的64位arm内核启动。

找出压缩后的内容在图像中的起始位置。

od -A d -t x1 vmlinuz | grep '1f 8b 08 00'

期望结果 :

0000000 1f 8b 08 00 00 00 00 00 02 03 ec 5b 0f 74 54 e5

第一个数字字符串0000000是要查找的位置。 在这种情况下,它位于镜像开头。

现在使用dd提取数据,然后使用zcat将其解压缩到文件中。 如果您的数字不是0000000,请确保将其作为跳过值。

dd if=vmlinuz bs=1 skip=0000000 | zcat > vmlinux

更新config.txt以进行引导

现在我们有了未压缩的镜像,我们将要更新config.txt文件,以告诉Pi如何启动。

编辑config.txt

vim config.txt

首先注释掉所有[pi *]块。 注释掉该块及其选项。 应该是这样的。

#[pi4]
#kernel=uboot_rpi_4.bin
#max_framebuffers=2

#[pi2]
#kernel=uboot_rpi_2.bin

#[pi3]
#kernel=uboot_rpi_3.bin

在[all]部分中添加kernel=vmlinuxinitramfs initrd.img followkernel。 剩下的一切都保持原样。

[all]
arm_64bit=1
device_tree_address=0x03000000
kernel=vmlinux
initramfs initrd.img followkernel

更新.dat和.elf文件

现在,我们需要在raspberrypi/firmware Github的master分支中将.dat和.elf文件更新为最新版本。

下载启动文件夹
访问上面的链接,并使用Gi​​tZip之类的文件下载文件夹。

下载Github文件夹

从下载的文件夹中复制文件
接下来,将所有.dat和.elf文件复制到启动文件夹中。覆盖所有文件。

cp ~/Downloads/firmware-/boot/*.dat ./

cp ~/Downloads/firmware-/boot/*.elf .

开机

现在您可以启动Raspberry Pi。 确保拔下SD卡。 从PC上卸载SSD。 将其插入Raspberry Pi并打开电源。

之后

如果您的DNS速度慢。 例如。 sudo apt更新真的很慢。 确保使用良好的名称服务器更新/etc/resolve.conf。

#nameserver 127.0.0.53
nameserver 1.1.1.1
nameserver 1.0.0.1

引用
https://www.raspberrypi.org/forums/viewtopic.php?t=275291#p1667965
https://www.raspberrypi.org/forums/viewtopic.php?f=131&t=268476#p1666154
https://community.home-assistant.io/t/error-native-usb-boot-without-sd-card-for-the-raspberry-pi4-ssd-boot/199888
https://github.com/raspberrypi/firmware/tree/master/boot
https://superuser.com/questions/298826/how-do-i-uncompress-vmlinuz-to-vmlinux

本文译自 https://eugenegrechko.com/blog/USB-Boot-Ubuntu-Server-20.04-on-Raspberry-Pi-4