KERNEL + ROOTFS para Cyclone V
Actualización, configuración y compilación del kernel de Linux para la FPGA Cyclone V y creación de un sistema de ficheros raíz personalizado con Builroot.
FPGA & CPLD
Biblioman
3/5/20263 min leer


Introducción
El hardware sin un sistema operativo optimizado para él no sirve de nada. En los siguientes apuntes vimos como personalizar el hardware de la placa QMTECH que incorpora la FPGA Cyclone V pero el desarrollo está incompleto si no configuramos un kernel + rootfs adecuado al hardware incluido en la FPGA. Estos apuntes junto con el vídeo al final muestran el camino seguido para obtener el desarrollo completo del software, que consta de dos partes la primera la configuración y compilación del kernel de Linux a través de las fuentes y la segunda la creación del sistema de ficheros raíz de un sistema operativo minimalista pero funcional adecuado al hardware de la placa utilizando el proyecto Buildroot.
Entorno de desarrollo
Utilizaremos una máquina virtual con Ubuntu 16.04 instalado e instalaremos las siguientes dependencias:
sudo apt update
sudo apt install sed make binutils build-essential gcc g++ patch gzip bzip2 perl tar cpio unzip rsync file bc git python3 libncurses5-dev libssl-dev bison flex libelf-dev wget
Instalamos el compilador cruzado:
sudo apt-get install gcc-arm-linux-gnueabihf
Configuración y compilación del kernel:
Descargamos las fuentes del kernel:
git clone https://github.com/Biblioman09/linux_socfpga.git
Comprobamos la versión ejecutando desde el raíz de la carpeta:
make -n kernelversion
Configuración inicial valida para Cyclone V. Desde la carpeta raíz de las fuentes del kernel ejecutamos:
make ARCH=arm socfpga_defconfig
Configuramos el kernel
make ARCH=arm menuconfig
Nos aparecerá la ventana de configuración del kernel:


En esta ventana tenemos "cacharreo" para rato pero de momento lo único que necesitamos añadir es:
[*] Enable the block layer --->Support for large (2TB+) block devices and files
Después guardamos los cambios y salimos.
Para compilar el kernel ejecutamos el siguiente comando en la terminal dentro de la carpeta raíz de las fuentes del kernel:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc) zImage
El directorio con el nuevo kernel es el siguiente: arch/arm/boot/zImage
Configuración y compilación de los archivos rootfs del sistema con Buildroot
Nos descargamos la versión 2023.02 de Buildroot y la descomprimimos:
wget https://buildroot.org/downloads/buildroot-2023.02.tar.gz
tar -xzf buildroot-2023.02.tar.gz
Entramos a la carpeta buildroot-2023.02 y ejecutamos make nconfig:
cd buildroot-2023.02
make nconfig
Nos aparecerá la ventana de configuración de Buildroot:


Configuramos las diferentes opciones de la siguiente manera:
Target options:
• Target Architecture: ARM (little endian).
• Target Architecture Variant: cortex-A9.
• [*] Enable NEON SIMD extension support
• [*] Enable VFP extension support
• Target ABI: EABIhf.
• Floating point strategy (NEON)
• ARM instruction set (ARM) │
• Target Binary Format (ELF)
Toolchain:
• Toolchain type (Buildroot toolchain)
• (buildroot) custom toolchain vendor name
• C library (glibc)
• Kernel Headers (Same as kernel being built)
• Custom kernel headers series (4.11.x)
• Las demás opciones por defecto (sin marcar)
System configuration:
• Root FS skeleton (default target skeleton)
• (CycloneV) System hostname
• (Bienvenido a Cyclone V!. Construido con Buildroot por Biblioman 09 https://aquihayapuntes.com
• Root password: (deja vacío o setea uno).
• Enable root login with password: Yes.
• Run a getty (login prompt) after boot: Yes (en ttyAMA0 o ttyS0 para console).
• Demás opciones por defecto
Kernel:
• [*] Linux Kernel
• Kernel version (Custom version)
• (4.11) Kernel version
• () Custom kernel patches │
• Kernel configuration (Using an in-tree defconfig file)
• (socfpga) Defconfig name
• Kernel binary format (zImage)
• Las demás opciones por defecto
Target packages:
• BusyBox (default). .
• Hardware handling-→ minicom
Filesystem images:
• [*] ext2/3/4 root filesystem
• ext2/3/4 variant (ext4)
• [*] tar the root filesystem
• Compression method (gzip)
Guardamos y salimos (Save > Exit).
Para compilar:
make -j$(nproc)
Una vez compilados los archivos rootfs están en la carpeta output de buildroot-2023.02 concretamente es el archivo: rootfs.tar
Copiamos los archivos del sistema en la partición ext4 de la tarjeta micro-SD formateada previamente con Gparted con el siguiente comando:
sudo tar -C /destination/of/extraction -xf rootfs.tar
Vídeo (paso a paso)

