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)