19/05/2023 | Sistema embebido,Tecnologías

Qué es el Proyecto Yocto y cómo ayuda a la construcción de sistemas embebidos

Introducción

Yocto es una plataforma de construcción de sistemas embebidos que se ha convertido en una herramienta esencial para los desarrolladores de software. Creado en 2010 como un proyecto de código abierto, ofrece un conjunto de herramientas y un proceso de construcción automatizado para ayudar a crear sistemas Linux personalizados y optimizados para sus aplicaciones.

Con Yocto, los desarrolladores pueden crear sistemas operativos Linux personalizados para infinidad de dispositivos, desde pequeñas placas de desarrollo hasta  sistemas embebidos complejos.

En este artículo, explicaremos qué es Yocto, cómo funciona y cuáles son las principales características que lo hacen tan atractivo para los desarrolladores de sistemas embebidos. Además, analizaremos algunos ejemplos de casos de uso para Yocto.

¿Por qué Yocto?

Hay varias razones por las que los desarrolladores de sistemas embebidos elegimos utilizar Yocto en nuestros proyectos:

  • Personalización: Yocto nos permite crear sistemas operativos personalizados y optimizados para aplicaciones específicas. Esto significa que podemos eliminar cualquier componente no deseado del sistema operativo, reduciendo así el tamaño del sistema y mejorando el rendimiento.
  • Flexibilidad: Yocto es compatible con una amplia gama de arquitecturas de hardware y permite crear sistemas operativos para cualquier tipo de dispositivo.
  • Eficiencia: Yocto utiliza un proceso de construcción automatizado que hace que el proceso de construcción de sistemas operativos personalizados sea más rápido y eficiente. Así, los desarrolladores podemos enfocarnos en las aplicaciones en lugar de pasar tiempo creando herramientas y procesos de construcción desde cero.
  • Comunidad activa: Al ser un proyecto de código abierto con una comunidad activa y comprometida, los desarrolladores podemos aprovechar el conocimiento y la experiencia de la comunidad para resolver problemas y mejorar nuestros proyectos.
  • Reproductibilidad: La construcción de sistemas Linux personalizados utilizando Yocto puede garantizar la reproducibilidad de los resultados, lo que significa que es posible recrear exactamente el mismo sistema en diferentes plataformas o en diferentes momentos.

El Proyecto Yocto

Yocto combina, mantiene y valida 3 elementos clave para el trabajo de los desarrolladores:

  • Un conjunto de herramientas integradas creadas para facilitar el trabajo con Linux embebido.
  • Una distribución embebida de referencia (llamada Poky).
  • El sistema de compilación OpenEmbedded (mantenido junto con el proyecto OpenEmbedded).

Esquema Proyecto Yocto

¿Qué es Poky?

Dentro de Yocto existen varios componentes y herramientas de código abierto que forman parte del entorno de desarrollo del proyecto.

Poky es una distribución de referencia de Linux. Es en realidad un ejemplo de construcción, un punto de partida predeterminado para construir sistemas operativos personalizados. En funcionamiento, crea un pequeño sistema operativo, mediante un conjunto de metadatos, configuraciones y recetas que constituyen el sistema de compilación de Linux.

El sistema de compilación se descarga con archivos que contienen las instrucciones de compilación. Estos archivos son las recetas (recipes) y capas (layers). Los cuales pueden ser modificados, copiados o utilizados de cualquier forma que sea necesaria para crear una imagen de Linux personalizada.

Las recetas son la forma más común de metadatos. Una receta contiene una lista de configuraciones y tareas (instrucciones) que se usan para construir la imagen binaria. Una receta describe dónde obtener el código fuente y qué parches aplicar. Las recetas describen las dependencias de las bibliotecas o de otras recetas, así como las opciones de configuración y compilación. Estas recetas se estructuran almacenándose en lo que llamamos capas (layers).

El modelo de Capas

El proyecto Yocto tiene un modelo de desarrollo particular llamado el Modelo de Capas (Layer Model). 

El modelo de capas está diseñado para admitir tanto la colaboración como la personalización al mismo tiempo. Las capas son repositorios que contienen conjuntos de instrucciones relacionadas que le indican al sistema de compilación qué hacer. Los usuarios pueden colaborar, compartir y reutilizar capas, que a su vez pueden ser modificadas en las instrucciones o configuraciones anteriores en cualquier momento.

Esta poderosa capacidad de sobreescritura es lo que le permite personalizar capas colaborativas o proporcionadas por la comunidad para adaptarse a los requisitos de tu producto.

Otra función útil es que se pueden utilizar para separar lógicamente la información de su compilación. Como ejemplo, podemos tener una capa de GUI (Graphic User Interface), una configuración de distribución, un middleware o una aplicación. Poner todo estos procesos en una sola capa, limita y complica la futura personalización o reutilización. Aislar la información en capas, por otro lado, ayuda a simplificar futuras actualizaciones y la reutilización de componentes.

Workflow

Lo pasos a seguir para la creación de una imagen usando Yocto se podrían resumir en:

  1. Para comenzar, los desarrolladores especifican la arquitectura, las políticas, los parches y los detalles de configuración.
  2. El sistema de compilación obtiene y descarga el código fuente desde donde se haya especificado. El proyecto admite métodos estándar como tarballs o sistemas de repositorios de código fuente como git.
  3. Una vez descargadas, las fuentes se extraen a un área de trabajo local donde se aplican parches y se ejecutan los pasos comunes para configurar y compilar el software.
  4. El software se instala en un área de preparación temporal donde se utilizará el formato de paquete binario que seleccione (deb, rpm o ipk) para implementar el software.
  5. Se ejecutan diferentes controles de calidad a lo largo de todo el proceso de construcción.
  6. Una vez que se crean los archivos binarios, se genera un feed de paquetes binarios que luego se usa para crear la imagen final del archivo raíz.
  7. Finalmente, se genera la imagen del sistema de archivos.

Este flujo de trabajo cambiará dependiendo de qué componentes y herramientas se estén usando realmente.

Detalles más específicos para empezar a trabajar con yocto se pueden encontrar en los tutoriales construidos en el blog de kickstartembedded.

Esquema de workflow

Glosario

Archivos de configuración (conf): archivos que contienen definiciones globales de variables, variables definidas por el usuario e información de configuración de hardware. Transmiten al sistema de compilación qué debe compilar y poner en la imagen para admitir una plataforma en particular. Se encuentran dentro de la carpeta “conf” de cada receta o bien la carpeta de la compilación de la imagen. Por defecto se llama “build”.

Receta (Recipes): La forma más común de metadatos. Una receta contendrá una lista de configuraciones y tareas (instrucciones) para construir paquetes que luego se usan para construir la imagen binaria. Una receta describe de dónde obtiene el código fuente y qué parches aplicar. Las recetas describen las dependencias de las bibliotecas o de otras recetas, así como las opciones de configuración y compilación. Se almacenan en capas (layers).

Capa (Layers): Una colección de recetas relacionadas. Las capas permiten consolidar metadatos relacionados para personalizar su compilación y aislar información para múltiples compilaciones de arquitectura. Las capas son jerárquicas en su capacidad de sobrescribir a especificaciones anteriores. Se pueden incluir cualquier cantidad de capas disponibles del Proyecto Yocto y personalizar la imagen agregando las propias capas junto a ellas.

Metadatos (Metadata): un elemento clave del Proyecto Yocto. Se utilizan para construir una distribución de Linux, contenidos en los archivos que el sistema de compilación analiza al crear una imagen. En general, los metadatos incluyen recetas, archivos de configuración y otra información que hace referencia a las propias instrucciones de construcción, así como los datos utilizados para controlar qué se construye y cómo. Los metadatos también incluyen comandos y datos utilizados para indicar qué versiones de software utilizar y de dónde obtenerla, así como cambios o adiciones al propio software (parches o archivos auxiliares) utilizados para corregir errores o personalizar el software. OpenEmbedded Core es un conjunto importante de metadatos validados.

OpenEmbedded-Core: oe-core son metadatos compuestos por recetas básicas, clases y archivos asociados que están destinados a ser comunes entre muchos sistemas diferentes derivados de OpenEmbedded, incluido el Proyecto Yocto. Es un subconjunto curado de un repositorio original desarrollado por la comunidad OpenEmbedded que se ha reducido a un conjunto básico de recetas validadas continuamente, lo que da como resultado un conjunto más pequeño estrictamente controlado y de calidad garantizada.

Poky: una distribución integrada de referencia y una configuración de prueba de referencia creadas para: proporcionar una distribución funcional de nivel básico, que se puede usar para ilustrar cómo personalizar una distribución; validar los componentes del proyecto Yocto y facilitar que los usuarios descarguen el Proyecto Yocto. Poky no es una distribución a nivel de producto, sino un buen punto de partida para la personalización. Poky es una capa de integración sobre oe-core.

Sistema de compilación «Bitbake» : un organizador  y un motor de ejecución que, primero, analiza las instrucciones (recetas) y los datos de configuración. A continuación, crea un árbol de dependencias para ordenar la compilación, programa la compilación del código incluido y, por último, ejecuta la creación de la imagen de Linux personalizada. BitBake es una herramienta de construcción similar a la de ”Make”. Las recetas de BitBake especifican cómo se construye un paquete en particular. 

Paquetes: el resultado del sistema de compilación utilizado para crear su imagen final.

Extensible Software Development Kit (ESDK): un SDK personalizado para desarrolladores de aplicaciones que les permite incorporar su biblioteca y cambios de programación nuevamente en la imagen para que su código esté disponible para otros desarrolladores de aplicaciones.

Imagen: una forma binaria de una distribución de Linux (sistema operativo) destinada a cargarse en un dispositivo.

Referencias

[1]: https://kickstartembedded.com/2021/12/19/yocto-part-1-a-definitive-introduction/

[2]: https://kickstartembedded.com/2021/12/19/yocto-part-1-a-definitive-introduction/

Compartir en:

Relacionados