在树莓PI 4上配置Fedora CoreOS

Fedora CoreOS生产64位ARM( aarch64 )文物。这些图像可以用作Raspberry PI 4设备的操作系统。在尝试在Raspberry PI 4上设置和运行FCOS之前,您需要 更新EEPROM 至最新版本,并选择启动Raspberry PI 4的方式。有两个选项:

U-Boot是覆盆子PI 4传统的启动方式。这个 EDK2固件 致力于提供一个层,使RPi4系统就绪ES(兼容SBBR)类似于大多数较大的64位ARM服务器。

##在树莓PI 4上更新EEPROM

Raspberry PI 4使用EEPROM来引导系统。过去的EEPROM/固件 读取FAT16 EFI分区时出现问题 ,其中 FCOS使用 。为了获得在RPi4上运行FCOS的最佳体验,请将EEPROM更新到最新版本。要检查您是否有最新版本,您可以访问 Raspberypi/rpi-EEPROM版本页 并确保您的Raspberry PI在启动时报告的版本与上一次发布的日期大致相同。

忽略2021年10月8日的版本,因为它只是对之前版本的重新打包。

这个 覆盆子PI文档 建议使用Raspberry PI Imager创建可用于更新EEPROM的引导盘。如果您使用的是Fedora Linux,Raspberry PI Imager已打包,可从存储库中获得。您可以使用以下命令进行安装:

dnf install rpi-imager
您可以成功地使用 rpi-imager 从内部的 工具容器

如果不是在Fedora Linux上,您将需要按照文档获取相机。

一旦你启动并运行了相机(在Fedora上,你可以用 rpi-imager 在命令行上),您将看到相机应用程序加载:

Raspberry Pi Imager Application

在这一点上,您可以跟随 这些文档 了解如何创建光盘,然后更新您的树莓PI 4。

##安装FCOS并通过U-Boot引导

要通过U-Boot在Raspberry PI 4上运行FCOS,需要在另一个系统上准备SD卡或USB磁盘,然后将磁盘移动到RPi4。将FCOS写入磁盘后,还需要将几个文件复制到FCOS磁盘的EFI分区上。查看 覆盆子PI文档 阅读更多关于这些文件的用途。

在这种情况下,我们可以从 uboot-images-armv8bcm2711-firmwarebcm283x-firmwarebcm283x-overlays 来自Fedora Linux存储库的RPM。首先下载它们并将其存储在系统上的临时目录中:

RELEASE=35 # The target Fedora Release. Use the same one that current FCOS is based on.
mkdir -p /tmp/RPi4boot/boot/efi/
sudo dnf install -y --downloadonly --release=$RELEASE --forcearch=aarch64 --destdir=/tmp/RPi4boot/  uboot-images-armv8 bcm283x-firmware bcm283x-overlays

现在提取RPM的内容并复制适当的 u-boot.bin 对于就位的RPi4:

警告:使用以下命令提取RPM的内容,使用 coreos-installer ,并且将文件复制到ESP分区应从工具容器外部完成。这个 root 容器中的用户映射到与不同的用户ID(UID root ( UID=0 )用户。试图在容器中运行其中的某些命令和在主机上运行这些命令中的一些可能会导致权限错误或所有权错误,并可能影响您成功安装Fedora CoreOS的能力。

for rpm in /tmp/RPi4boot/*rpm; do rpm2cpio $rpm | sudo cpio -idv -D /tmp/RPi4boot/; done
sudo mv /tmp/RPi4boot/usr/share/uboot/rpi_4/u-boot.bin /tmp/RPi4boot/boot/efi/rpi4-u-boot.bin

coreos-installer 以安装到目标磁盘。确实有 各种方式 运行 coreos-installer 并安装到目标磁盘。我们不会在这里全部介绍它们,但此工作流最贴切地反映了 “从容器安装” 文件。

FCOSDISK=/dev/sdX
sudo coreos-installer install --architecture=aarch64 -i config.ign $FCOSDISK
确保您提供了 Ignition配置 当你跑步的时候 coreos-installer

现在挂载ESP分区并将文件复制过来:

FCOSEFIPARTITION=$(lsblk $FCOSDISK -J -oLABEL,PATH  | jq -r '.blockdevices[] | select(.label == "EFI-SYSTEM")'.path)
mkdir /tmp/FCOSEFIpart
sudo mount $FCOSEFIPARTITION /tmp/FCOSEFIpart
sudo rsync -avh --ignore-existing /tmp/RPi4boot/boot/efi/ /tmp/FCOSEFIpart/
sudo umount $FCOSEFIPARTITION

现在取出USB/SD卡并将其连接到RPi4并引导。

启动可能需要一些时间,特别是在磁盘速度较慢的情况下。要有耐心。您可能在20-30秒内看不到屏幕上的任何内容。

##安装FCOS并通过EDK2引导

RPi4有EDK2 UEFI固件实施( Pftf/RPi4 ),它试图使RPi4系统就绪ES(符合SBBR),并允许您假装RPi4类似于任何其他SystemReady服务器硬件。

您可以将固件写入磁盘(USB或SD卡),然后像在任何裸机服务器上一样引导/安装FCOS。但是,固件文件需要在SD卡或USB磁盘上,并且将占用SD卡插槽或USB插槽。根据您的需要,这可能是可接受的,也可能不是。根据答案的不同,您有几个选择:

  • 独立固件磁盘(也称为“独立磁盘模式”)

  • 组合Fedora CoreOS+EDK2固件磁盘(也称为“组合磁盘模式”)

以下各节将介绍这些选项。无论您选择哪个选项,您都会考虑是否需要 更改3G内存限制启用设备树引导

#EDK2:独立固件磁盘模式

在单独的磁盘模式下,EDK2固件将占用您的RPi4上的SD卡插槽或USB插槽。一旦将固件磁盘连接到系统,您就可以按照 裸机安装文档 并假装RPi4是任何其他服务器硬件。

要创建带有固件的磁盘(SD或USB),您可以执行如下操作:

VERSION=v1.32  # use latest one from https://github.com/pftf/RPi4/releases
UEFIDISK=/dev/sdX
sudo mkfs.vfat $UEFIDISK
mkdir /tmp/UEFIdisk
sudo mount $UEFIDISK /tmp/UEFIdisk
pushd /tmp/UEFIdisk
sudo curl -LO https://github.com/pftf/RPi4/releases/download/${VERSION}/RPi4_UEFI_Firmware_${VERSION}.zip
sudo unzip RPi4_UEFI_Firmware_${VERSION}.zip
sudo rm RPi4_UEFI_Firmware_${VERSION}.zip
popd
sudo umount /tmp/UEFIdisk

将此磁盘连接到您的pi4后,您现在可以像在任何裸机服务器上一样安装FCOS。

单独的固件磁盘将需要保持永久连接,以便将来的引导正常工作。

#edk2:Fedora CoreOS+edk2组合固件盘

在组合磁盘模式下,EDK2固件将驻留在Fedora CoreOS的EFI分区中,从而允许将单个磁盘用于EDK2固件和FCOS。

有几种方法可以实现这一目标:

  • 直接在RPi4上安装

  • 在备用计算机上准备Pi4磁盘

#EDK2:组合磁盘模式直接安装

当执行直接安装时,意味着您引导(通过EDK2固件)进入Fedora CoreOS实时环境(ISO或PXE)并运行 coreos-installer ,您可以在安装完成后挂载已安装的FCOS磁盘的EFI分区(第二个分区),并复制EDK2固件文件:

UEFIDISK=/dev/mmcblkX or /dev/sdX
FCOSDISK=/dev/sdY
FCOSEFIPARTITION=$(lsblk $FCOSDISK -J -oLABEL,PATH  | jq -r '.blockdevices[] | select(.label == "EFI-SYSTEM")'.path)
mkdir /tmp/mnt{1,2}
sudo mount $UEFIDISK /tmp/mnt1
sudo mount $FCOSEFIPARTITION /tmp/mnt2
sudo rsync -avh /tmp/mnt1/ /tmp/mnt2/
sudo umount /tmp/mnt1 /tmp/mnt2

现在,您可以从RPi4中取出多余的磁盘并重新启动机器。

启动可能需要一些时间,特别是在磁盘速度较慢的情况下。要有耐心。您可能在20-30秒内看不到屏幕上的任何内容。

#EDK2:组合磁盘模式备盘

从备用计算机准备RPi4磁盘时(即从笔记本电脑创建磁盘),您可以在运行之后挂载第二个分区** coreos-installer 并下载EDK2固件文件。

首先,跑步 coreos-installer 要安装到目标磁盘,请执行以下操作:

FCOSDISK=/dev/sdX
sudo coreos-installer install --architecture=aarch64 -i config.ign $FCOSDISK

现在您可以挂载第二个分区并下载EDK2固件文件:

FCOSEFIPARTITION=$(lsblk $FCOSDISK -J -oLABEL,PATH  | jq -r '.blockdevices[] | select(.label == "EFI-SYSTEM")'.path)
mkdir /tmp/FCOSEFIpart
sudo mount $FCOSEFIPARTITION /tmp/FCOSEFIpart
pushd /tmp/FCOSEFIpart
VERSION=v1.32  # use latest one from https://github.com/pftf/RPi4/releases
sudo curl -LO https://github.com/pftf/RPi4/releases/download/${VERSION}/RPi4_UEFI_Firmware_${VERSION}.zip
sudo unzip RPi4_UEFI_Firmware_${VERSION}.zip
sudo rm RPi4_UEFI_Firmware_${VERSION}.zip
popd
sudo umount /tmp/FCOSEFIpart

现在取出USB/SD卡并将其连接到RPi4并引导。

启动可能需要一些时间,特别是在磁盘速度较慢的情况下。要有耐心。您可能在20-30秒内看不到屏幕上的任何内容。

#EDK2固件:更改3G限制

如果你有一部内存超过3g的pi4,你很可能想要禁用3g内存限制。在EDK2固件菜单中,转到

  • Device ManagerRaspberry Pi ConfigurationAdvanced ConfigurationLimit RAM to 3GBDisabled

  • F10 保存→ Y 要确认

  • Esc 到顶层菜单,然后选择 reset 使系统循环。

#EDK2固件:通过DeviceTree的GPIO

当EDK2固件处于ACPI模式(默认模式)时,您将无法访问GPIO(即,PI HATS将不起作用)。要访问GPIO引脚,您需要在EDK2菜单中将设置更改为DeviceTree模式。

  • Device ManagerRaspberry Pi ConfigurationAdvanced ConfigurationSystem Table SelectionDeviceTree

  • F10 保存→ Y 要确认

  • Esc 到顶层菜单,然后选择 reset 使系统循环。

引导后,您应该会看到下面的条目 /proc/device-tree/ 另请参阅 /dev/gpiochip1/dev/gpiochip2

[core@localhost ~]$ ls /proc/device-tree/ | wc -l
35
[core@localhost ~]$ ls /dev/gpiochip*
/dev/gpiochip0  /dev/gpiochip1
您可以从用户空间使用以下命令与GPIO交互 libgpiod 以及相关联的绑定或工具。