Yocto: Creando tu próxima distro Linux

Descubre qué es Yocto Project, sus ventajas, usos reales en Izertis y cómo crear tu propia distribución Linux para Raspberry Pi paso a paso, de forma sencilla y flexible.
Logo de Yocto Project sobre fondo de servidores

Indice

  1. Qué es y qué no es Yocto
  2. Ventajas de Yocto
  3. Puntos débiles
  4. Yocto en Izertis
  5. Caso práctico: Domotizando la casa de forma segura y facil
  6. Teoría: Yocto behind the scenes
  7. Conclusiones
  8. Referencias bibliográficas

1. Qué es y qué no es Yocto

Mucha gente piensa que Yocto es una distribución Linux, pero no es así. Yocto Project, o simplemente Yocto, es un conjunto de herramientas open source perteneciente a la Linux Foundation que permite crear distribuciones basadas en GNU/Linux. Es decir, no se trata de una distribución concreta, sino de una plataforma para crear una distribución personalizada.

Fue anunciado por la Linux Foundation en 2010 y, desde entonces, cada vez más empresas del ámbito de la computación y los microprocesadores están creando alianzas estratégicas, dando soporte y mecenazgo al proyecto. Solo por citar algunas, podemos mencionar a Intel, ARM o NXP. Aunque es difícil estimar cuántos dispositivos pueden estar desplegados en el mundo utilizando distribuciones creadas con Yocto, se calcula que la cifra ronda las decenas de millones. Yocto se utiliza tanto en servidores como en dispositivos embebidos, aunque es en esta última categoría donde probablemente se esté imponiendo como un estándar.

2. Ventajas de Yocto

Las razones principales por las que Yocto se está imponiendo en el ámbito de los dispositivos conectados, IoT y Edge Computing son:

  • Permite crear sistemas altamente reproducibles. Es decir, todo en Yocto puede versionarse en un repositorio, lo que permite que todo el equipo de desarrollo genere la misma distribución. Además, se puede integrar en sistemas CI/CD para generar compilaciones centralizadas, y el equipo de pruebas e integración puede trabajar con una versión determinista.

  • Tiene un gran soporte, tanto por parte de las empresas como de una amplia comunidad que colabora de forma desinteresada. El resultado es que las distribuciones se mantienen actualizadas con los últimos parches de seguridad que llegan de forma constante. Además, existen múltiples ramas LTS (long-term support) que pueden tener hasta cinco años de soporte.

  • Es flexible y agnóstico al hardware, lo que permite crear distribuciones compatibles con distintos dispositivos o incluso arquitecturas. Esto facilita pivotar rápidamente en situaciones donde el hardware se vuelve obsoleto y debe rediseñarse, o simplemente cuando se desea reutilizar al máximo la distribución entre una familia de dispositivos.

3. Puntos débiles

Los aspectos más negativos de Yocto son:

  • Requiere muchos recursos para trabajar, ya que es un proceso pesado e intensivo.

  • Puede resultar demasiado complejo para proyectos pequeños que requieren tiempos de desarrollo más cortos.

4. Yocto en Izertis

En Izertis ya estamos trabajando en proyectos con Yocto y cada vez encontramos más clientes interesados en esta tecnología. El principal proyecto actual consiste en la creación de una máquina de distribución logística a través de conductos para el sector del comercio minorista. La máquina cuenta con una pantalla táctil, varias interfaces de red y numerosos periféricos, como motores, actuadores y sensores.

En cuanto al software, se compone de un frontend, varios procesos de backend y una librería HAL (hardware abstraction layer) que conecta las llamadas a los endpoints con el bajo nivel. Yocto nos ha permitido adaptar nuestro Linux a las necesidades del cliente, evolucionar nuestro hardware sin perder soporte, desarrollar la aplicación en C utilizando la toolchain generada por la propia herramienta y gestionar de forma sencilla el despliegue de actualizaciones de software vía OTA (over the air).

5. Caso práctico: Domotizando la casa de forma segura y fácil.

Si bien a continuación veremos los aspectos generales de la teoría y todo lo que sucede entre bastidores, en este caso práctico vamos a “meter el turbo” y comprobar cómo generar un sistema basado en Yocto puede reducirse a seguir unos sencillos pasos.

5.1. Requisitos

  • Un equipo con Linux, una máquina virtual o WSL.
  • Podman instalado (gestor de contenedores equivalente a Docker).
  • Una Raspberry Pi 4 o 5 conectada por cable de red al router de casa.
  • Una tarjeta microSD donde instalar la imagen.
Collage con los logotipos de Home Assistant, Podman y una Raspberry Pi 5, utilizados en un proyecto de domótica con Yocto
Ilustración representativa del ecosistema domótico desarrollado con Yocto: Home Assistant, contenedores Podman y Raspberry Pi 5

5.2. Generando nuestra imagen de MyOs con Home Assistant para una Raspberry Pi 5

En este ejemplo práctico vamos a generar una imagen personalizada de Linux con Yocto, que incluirá Home Assistant preinstalado y adaptado para ejecutarse en una Raspberry Pi 5. Para ello, utilizaremos un repositorio ya preparado y un entorno automatizado mediante contenedores con Podman.

Bash
# Clonamos el repo
git clone -b scarthgap https://github.com/Gmatarrubia/yocto-rpi5-demo.git
cd yocto-rpi5-demo

# Usamos el script que, a través de Podman, arranca un contenedor preparado para trabajar con Yocto.
# La primera vez creará la imagen; en ejecuciones posteriores solo iniciará el contenedor.
./podman-env.sh

# Una vez dentro, ejecutamos la construcción de la imagen de Yocto.
# (La primera vez puede durar varias horas)
# ./build.sh -m <target>  // donde <target> será tu modelo de Raspberry Pi: por ejemplo, rpi5, rpi4...
./build.sh -m rpi5

Una vez finalizada la compilación de la imagen, insertamos la tarjeta microSD en nuestro equipo y podemos copiarla usando la herramienta bmaptool, con un comando similar al siguiente (ajustando los valores según el caso):

Bash
# Ajusta el siguiente comando en función de la máquina utilizada (por ejemplo, raspberrypi5)
# y del dispositivo correspondiente a tu microSD (por ejemplo, /dev/sdc).
sudo bmaptool copy --bmap build_rpi5/tmp-glibc/deploy/images/raspberrypi5/core-image-minimal-raspberrypi5.rootfs.wic.bmap build_rpi5/tmp-glibc/deploy/images/raspberrypi5/core-image-minimal-raspberrypi5.rootfs.wic.bz2 /dev/sdc

Cuando finalice, inserta la microSD en la Raspberry Pi, conéctala al router mediante cable Ethernet y proporciona alimentación. Al cabo de unos minutos, podrás acceder al portal web:

Bash
myos.local:8123
Pantalla de bienvenida de Home Assistant accediendo a myos.local:8123
Interfaz inicial tras desplegar Home Assistant con Yocto

¡A partir de aquí ya podrás configurar tu hogar inteligente! 😎 Además, podrás crear dashboards como el siguiente. ¿Aceptas el reto?

Panel de control de domótica con Home Assistant en pantalla táctil
Vista del dashboard de Home Assistant configurado en una tablet montada en la pared

6. Teoría: Yocto behind the scenes

Yocto consta de varios tipos de elementos fundamentales:

  • Archivos de configuración
  • Metadatos
  • Scripts y código en Python y en Bash

Y se organiza en:

  • Layers o capas
  • Recipes o recetas
  • Classes o clases
  • Y otros ficheros

La forma más básica de trabajar con Yocto es descargar la capa Poky del repositorio oficial. Poky es la distribución de referencia proporcionada por la Linux Foundation, y con ella se puede comenzar a generar una distribución para una máquina virtual QEMU. En las últimas versiones, una advertencia nos recuerda que Poky no está preparada para entornos de producción, pero sí es un buen punto de partida para desarrollar nuestra propia distribución.

Luego, dependiendo del hardware donde queramos ejecutar nuestra distribución, será necesario incluir las capas BSP o Board Support Package. Estas capas contienen información de configuración específica para targets de hardware concretos. Por ejemplo, si queremos trabajar con una Raspberry Pi, debemos incluir la capa de ARM, así como la capa meta-raspberry. Esta última contiene configuraciones para targets como raspberrypi4 o raspberrypi5. A partir de ahí, podemos seguir añadiendo diferentes capas que aporten funcionalidades adicionales, según las necesidades del proyecto. Algunas capas pueden considerarse distro layers cuando contienen información sobre una distribución concreta. Así, una vez tengamos Poky, una capa BSP y una distro layer, ya dispondremos de todo lo necesario para generar una distribución específica para un hardware concreto.

Cada capa que incluyamos contará con múltiples recetas. Las recetas contienen la información necesaria sobre las tareas que deben ejecutarse para una aplicación. Las tareas más comunes suelen ser: descargar los recursos necesarios, configurar el entorno, realizar la compilación cruzada y empaquetar todos los outputs para la posterior composición del sistema de archivos y las imágenes de sistema.

Trabajar con Yocto es sinónimo de trabajar con bitbake, la herramienta que procesa toda la configuración y nos permite generar una imagen. Los dos archivos fundamentales para su funcionamiento son local.conf y bblayers.conf, que sirven para definir las configuraciones de alto nivel y las capas que deben incluirse, respectivamente.

Además de incluir capas "externas", es habitual crear capas locales. En estas se incluye la información propia del proyecto, y también se amplían o sobrescriben recetas existentes mediante archivos .bbappend, que se “incrustan” en las recetas originales.

La siguiente imagen resume muy bien todo el funcionamiento de Yocto:

6.1. Requisitos para trabajar con Yocto

Para trabajar con Yocto debemos disponer de un dispositivo con GNU/Linux. No todas las distribuciones tienen soporte oficial, pero sí las más comunes, como Fedora, Ubuntu o Debian. También es posible trabajar con máquinas virtuales o con WSL en el caso de Windows, aunque estas opciones son menos recomendables, ya que Yocto es muy intensivo en recursos y hasta la distribución más liviana puede tardar varias horas en generarse. Por ello, lo ideal es contar con un equipo que tenga al menos 8 núcleos de CPU, 16 GB de RAM y 150 GB de espacio en disco.

En mi opinión, para empezar a crear una distribución con Yocto no es necesario tener muchos conocimientos técnicos, más allá de un manejo básico de la terminal de Linux. De hecho, últimamente, con la extensión de Yocto para Visual Studio Code, ni siquiera eso. Pero si deseas avanzar más allá, lo recomendable es aprender a programar scripts en Bash y Python, así como familiarizarte con conceptos como SDK, toolchain y compilación cruzada.

En cuanto a los requisitos de software del equipo, Yocto lista las dependencias necesarias en función de la distribución base en la siguiente página: Yocto-required-packages

6.2 Forma básica de empezar

A continuación, te mostramos los pasos esenciales para comenzar con Yocto desde cero. Vamos a clonar la capa base (Poky) y preparar el entorno de trabajo en pocos comandos.

Bash
# Creamos una carpeta de trabajo
mkdir yocto-project
cd yocto-project
# Clonamos Poky
git clone https://git.yoctoproject.org/poky

Una vez descargada la capa, debemos entrar en el entorno de Yocto con:

Bash
source poky/oe-init-build-env

Esto creará una carpeta build para comenzar la generación, así como una carpeta llamada conf con una versión básica de local.conf y bblayers.conf. Podemos crear una imagen mínima que arranque en una máquina virtual QEMU de la siguiente manera:

Bash
# Editar el fichero local.conf y asegurarnos de que tenemos la siguiente configuración
MACHINE ?= "qemux86-64"
DISTRO = "poky"
IMAGE_FSTYPES = "ext4"

Luego, ejecutamos los siguientes comandos (Nota: la primera compilación puede tardar varias horas):

Bash
bitbake core-image-minimal
runqemu qemux86-64 core-image-minimal

Si comparamos este comienzo básico con el enfoque “turbo” del caso práctico, veremos que muchos pasos están automatizados mediante wrappers de Yocto, como el script build.sh y la herramienta KAS. Pero eso lo dejaremos para otro día.

Espero que os haya resultado interesante el uso de esta tecnología, así como el caso práctico descrito. Quedo a vuestra disposición para cualquier duda.

7. Conclusiones

Yocto puede parecer complejo al principio, pero cuando lo entiendes y empiezas a trabajar con él, te das cuenta de todo el control y flexibilidad que te da. Es una herramienta potente que te permite crear tu propia distribución Linux adaptada al milímetro, con justo lo que necesitas, sin extras ni limitaciones impuestas por terceros.

En Izertis ya hemos comprobado que es una tecnología madura, con una comunidad muy activa y en constante evolución. Aunque requiere algo de curva de aprendizaje y buenos recursos de hardware, las ventajas que aporta en proyectos embebidos, IoT o edge computing lo convierten en una opción muy a tener en cuenta.

Y como has visto en el caso práctico, no todo tiene por qué ser complicado. Con una buena base y las herramientas adecuadas, montar tu propio sistema puede ser más fácil de lo que parece.

8. Referencias bibliográficas

  1. The Yocto Project.
    Yocto Project Documentation. The Linux Foundation.
    Disponible en: https://www.yoctoproject.org/docs

  2. BitBake User Manual.
    BitBake: User Manual. The Yocto Project.
    Disponible en: https://docs.yoctoproject.org/bitbake/

  3. Linux Foundation.
    The Linux Foundation – Projects.
    Disponible en: https://www.linuxfoundation.org/projects

  4. Kazuhiro Hayashi.
    Reproducible and Maintainable Embedded Linux Environment with Poky. Free Electrons (Bootlin).
    https://www.yoctoproject.org/wp-content/uploads/sites/32/2023/10/ELCE2016_deby-min.pdf

  5. García de Jalón, José L.
    Sistemas embebidos con Linux. Editorial Marcombo, 2020.
    ISBN: 9788426728672

  6. Denis, Jean-Jacques.
    Mastering Embedded Linux Programming. Packt Publishing, 2021 (3.ª ed.).
    ISBN: 9781801077657

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Formo parte del departamento de Phygital en Izertis, concretamente en el equipo de software embebido. Me apasionan los sistemas embebidos en general y la impresión 3D, aunque mi especialidad son los sistemas operativos Linux embebidos.

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

22/06/2026

Juan Antonio Jiménez Torres

Vamos a instrumentalizar un SDD para un microservicio bancario. En este artículo sobre SDD - Spec Driven Development, instrumentalizado sobre OpenSpec vamos a construir una PoC de algo más serio que una tabla periódica. Un microservicio bancario muy simplificado que gestione cuentas y permita hacer transferencias

16/06/2026

Juan Antonio Jiménez Torres

Este es el segundo artículo sobre SDD, Spec Driven Development, instrumentalizado sobre OpenSpec. Pero esta vez nos acercaremos usando softwere gratuito. Por un lado OpenCode en lugar de ClaudeCode y usando el modelo gratuito Gemma4 de Google en lugar de otros de pago.

08/06/2026

Juan Antonio Jiménez Torres

Aprenderemos sobre SDD – Spec Driven Development instrumentalizado sobre OpenSpec. Haremos un primer acercamiento usando ClaudeCode con Sonnet, para luego, en un artículo posterior pasarnos a la versión gratuita de OpenCode con Gemma4