Proporcionar Fedora CoreOS en Raspberry Pi 4

Fedora CoreOS produce artefactos de 64 bit ARM (aarch64). Estas imágenes se pueden usar como Sistema Operativo para el dispositivo r the Raspberry Pi 4. Antes de intentar poner en funcionamiento FCOS en su Raspberry Pi 4 querrá Actualizar la EEPROM a la última versión y como desea arrancar la Raspberry Pi 4. Hay dos opciones:

U-Boot es la manera en que se ha arrancado tradicionalmente Raspberry Pi 4. El Firmware EDK2 es un esfuerzo para proporcionar capa que hará que RPi4 SystemReady ES (compatible con SBBR) sea similar a la mayoría de los servidores 64 bit ARM más grandes.

Actualización de la EEPROM en Raspberry Pi 4

La Raspberry Pi 4 utiliza una EEPROM para arrancar el sistema. Anteriormente, la EEPROM/firmware tenía problemas para leer una partición EFI FAT16, la cual la utiliza FCOS. Para obtener la mejor experiencia al ejecutar FCOS en la RPi4, actualice la EEPROM a la última versión. Para verificar si tienes la última versión, puedes ir a la página de lanzamientos de raspberrypi/rpi-eeprom y asegurarte de que la versión informada por tu Raspberry Pi al arrancar sea aproximadamente de la misma fecha que el último lanzamiento.

La Documentación de Raspberry Pi recomienda utilizar Raspberry Pi Imager para crear un disco de arranque que permite actualizar la EEPROM. Si usas Fedora Linux, Raspberry Pi Imager está empaquetado y disponible en los repositorios. Puedes instalarlo con:

dnf install rpi-imager
Puedes utilizar rpi-imager correctamente desde dentro de un contenedor Toolbx.

Si no está en Fedora Linux, necesitará seguir la documentación para obtener el generador de imágenes.

Una vez que tenga el generador de imagen encendido y en ejecución (en Fedora puede ejecutarlo con rpi-imager o la línea de comando), verá la carga de la aplicación de la imagen:

Aplicación de imágenes Raspberry Pi

En este punto puedes seguir la documentación para saber cómo crear el disco y luego actualizar tu Raspberry Pi 4.

Instalar FCOS y Arrancar por U-Boot

Para ejecutar FCOS en una Raspberry Pi 4 mediante U-Boot, es necesario preparar la tarjeta SD o el disco USB en otro sistema y luego transferirlo a la RPi4. Después de escribir FCOS en el disco, será necesario copiar algunos archivos adicionales en la partición EFI del disco FCOS. Consulta la Documentación de Raspberry Pi para obtener más información sobre la función de estos archivos.

En este caso, podemos obtener estos archivos de los RPM uboot-images-armv8, bcm2711-firmware, bcm283x-firmware y bcm283x-overlays de los repositorios de Fedora Linux. Primero, descárguelos y guárdelos en un directorio temporal de su sistema:

RELEASE=43 # La versión de Fedora de destino. Utilice la misma en la que se basa el FCOS actual.
mkdir -p /tmp/RPi4boot/boot/efi/
dnf download --resolve --releasever=$RELEASE --forcearch=aarch64 --destdir=/tmp/RPi4boot/ uboot-images-armv8 bcm283x-firmware bcm283x-overlays

Ahora extraiga el contenido de los RPM y copie el u-boot.bin apropiado para el RPi4 en su lugar:

Los siguientes comandos para extraer el contenido de los RPM, usar coreos-installer y copiar los archivos a la partición ESP deben ejecutarse desde fuera de un contenedor Toolbx. El usuario root del contenedor se asigna a un ID de usuario (UID) diferente al del usuario root (UID=0) del host. Intentar ejecutar algunos de estos comandos en el contenedor y en el host puede generar errores de permisos o de propiedad, lo que podría afectar la instalación correcta de Fedora CoreOS.
En Arch Linux, se recomienda instalar rpm-tools en lugar de rpmextract para que los RPM se descompriman automáticamente. Si no lo desea o no puede hacerlo, debe canalizar la salida de rpm2cpio a través del descompresor correcto, por ejemplo, zstd -d.
for rpm en /tmp/RPi4boot/*rpm; do rpm2cpio $rpm | cpio -idv -D /tmp/RPi4boot/; done
mv /tmp/RPi4boot/usr/share/uboot/rpi_arm64/u-boot.bin /tmp/RPi4boot/boot/efi/rpi-u-boot.bin

Ejecute coreos-installer para instalar en el disco de destino. Existen varias maneras de ejecutar coreos-installer e instalar en un disco de destino. No las cubriremos todas aquí, pero este flujo de trabajo se asemeja mucho a la documentación de "Instalación desde el contenedor".

FCOSDISK=/dev/sdX
STREAM=stable # o `next` o `testing`
sudo coreos-installer install -a aarch64 -s $STREAM -i config.ign $FCOSDISK
Asegúrese que proporcione un config de Ignition cuando ejecute coreos-installer.
Fedora CoreOS tiene un usuario core predeterminado que puede ser usado para explorar el SO. Si usted desea utilizarlo finalice su configuración proporcionando una clave SSH.

Ahora monte la partición ESP y copie los archivos en:

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 --chown 0:0 \
        /tmp/RPi4boot/boot/efi/ /tmp/FCOSEFIpart/
sudo umount $FCOSEFIPARTITION

Ahora tome la tarjeta USB/SD y adjúntelos al RPI4 y arranque.

Puede tomas algo de tiempo para arrancar, especialmente si el disco el lento. Sea paciente. Puede que no vea nada en la pantalla por 20-30 segundos.

Instalar FCOS y Arrancar por medio de EDK2

Hay una implementación de firmware EDK2 UEFI para el RPi4 (pftf/RPi4) que intenta hacer que el RPi4 sea SystemReady ES (compatible con SBBR) y le permite simular que el RPi4 es similar a cualquier otro hardware de servidor SystemReady.

Puede escribir el firmware en un disco (USB o tarjeta SD) y luego iniciar/instalar FCOS como lo haría en cualquier servidor físico. Sin embargo, los archivos de firmware deben estar en una tarjeta SD o un disco USB y ocuparán la ranura para tarjetas SD o una ranura USB. Dependiendo de sus necesidades, esto puede ser aceptable o no. Según la respuesta, tiene varias opciones:

  • Disco de firmware separado (también conocido como "modo de disco separado")

  • Fedora CoreOS combinado + Disco de Firmware EDK2 (también conocido como “modo de disco combinado”)

Estas opciones se tratan en las siguientes secciones. Independientemente de la opción que elija, deberá considerar si necesita Cambiar el límite de RAM 3G o Habilitar el arranque de DeviceTree.

EDK2: Modo de Disco Firmware Independiente

En el modo de disco independiente, el firmware EDK2 ocupará la ranura para tarjetas SD o una ranura USB de su RPi4. Una vez conectado el disco de firmware al sistema, podrá seguir la documentación de la instalación de instalación completa y simular que la RPi4 es cualquier otro hardware de servidor.

Para crear un disco (SD o USB) con el firmware en esto puedes hacer algo como:

VERSION=v1.50  # utilice uno más último desde 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

Al conectar este disco a su Pi4, ahora podrá instalar FCOS como lo haría en cualquier servidor físico.

El disco de firmware independiente deberá permanecer acoplado de forma permanente para que los arranques futuros funcionen.

EDK2: Se ha combinado Fedora CoreOS + Disco EDK2 Firmware

En el modo de disco combinado, el firmware EDK2 vivirá dentro de la partición EFI de Fedora CoreOS, lo que permitirá utilizar un solo disco para el firmware EDK2 y FCOS.

Hay unas pocas maneras de lograr esta meta:

  • Instalar Directorio en RPi4

  • Preparación de disco Pi4 en Máquina Alternativa

EDK2: Modo de Instalación Directa Combinada con Disco

Al realizar una instalación directa, es decir, al iniciar (a través del firmware EDK2) en el entorno en vivo de Fedora CoreOS (ISO o PXE) y ejecutar coreos-installer, puede montar la partición EFI (segunda partición) del disco FCOS instalado después de que se complete la instalación y copiar los archivos del firmware EDK2:

UEFIDISK=/dev/mmcblkX o /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

Ahora puede retirar el disco adicional desde el RPi4 y reinicie la máquina.

Puede tomas algo de tiempo para arrancar, especialmente si el disco el lento. Sea paciente. Puede que no vea nada en la pantalla por 20-30 segundos.

EDK2: Preparación del Disco de la Máquina Alternativa en Modo de Disco Combinado

Al preparar el disco RPi4 desde una máquina alternativa (es decir, crear el disco desde su computadora portátil), puede montar la segunda partición después de ejecutar coreos-installer y descargar los archivos de firmware EDK2.

Primero, ejecute coreos-installer para instalar a un disco de destino:

FCOSDISK=/dev/sdX
STREAM="stable" # o `next` o `testing`
sudo coreos-installer install -a aarch64 -s $STREAM -i config.ign $FCOSDISK

Ahora puedes montar la 2ª partición y bajar los archivos de firmware 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.50  # utiliza la última 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

Ahora tome la tarjeta USB/SD y adjúntelos al RPI4 y arranque.

Puede tomas algo de tiempo para arrancar, especialmente si el disco el lento. Sea paciente. Puede que no vea nada en la pantalla por 20-30 segundos.

Firmware EDK2: Cambio en el límite 3G

Si tienes un Pi4 con más de 3Gib de memoria lo más probable es que desees desactivar la limitación de memoria 3G. En el menú de firmware EDK2 ve a

  • Device ManagerRaspberry Pi ConfigurationAdvanced ConfigurationLimit RAM to 3GBDisabled

  • F10 para guardar → Y para confirmar

  • Esc al menú de nivel superior y seleccione restablecer para reiniciar el sistema.

Firmware EDK2: GPIO por medio del árbol DeviceTree

Con el firmware EDK2 en modo ACPI (predeterminado), no tendrá acceso a GPIO (es decir, ningún Pi HAT funcionará). Para acceder a los pines GPIO, deberá cambiar la configuración al modo DeviceTree en los menús de EDK2.

  • Gestor de DispositivoConfiguración de Raspberry PiConfiguración AvanzadaSelección de Tabla del SistemaDeviceTree

  • F10 para guardar → Y para confirmar

  • Esc al menú de nivel superior y seleccione restablecer para reiniciar el sistema.

Tras arrancar vería apuntes bajo /proc/device-tree/ y también vería /dev/gpiochip1 y /dev/gpiochip2:

[core@localhost ~]$ ls /proc/device-tree/ | wc -l
35
[core@localhost ~]$ ls /dev/gpiochip*
/dev/gpiochip0  /dev/gpiochip1
Puede hacer de interfaz con GPIO desde espacio de usuario utilizando libgpiod y vínculos o herramientas asociadas.