Indice
- Qué es y qué no es Yocto
- Ventajas de Yocto
- Puntos débiles
- Yocto en Izertis
- Caso práctico: Domotizando la casa de forma segura y facil
- Teoría: Yocto behind the scenes
- Conclusiones
- 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.

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
|
|

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

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
-
The Yocto Project.
Yocto Project Documentation. The Linux Foundation.
Disponible en: https://www.yoctoproject.org/docs -
BitBake User Manual.
BitBake: User Manual. The Yocto Project.
Disponible en: https://docs.yoctoproject.org/bitbake/ -
Linux Foundation.
The Linux Foundation – Projects.
Disponible en: https://www.linuxfoundation.org/projects -
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 -
García de Jalón, José L.
Sistemas embebidos con Linux. Editorial Marcombo, 2020.
ISBN: 9788426728672 -
Denis, Jean-Jacques.
Mastering Embedded Linux Programming. Packt Publishing, 2021 (3.ª ed.).
ISBN: 9781801077657