Cómo Sobrevivir a Linux Embebido-Parte 1 El Proceso de Desarrollo de Linux Embebido
El Proceso de Desarrollo de Linux Embebido
El kernel de Linux puede ejecutarse en muchas arquitecturas de computadora diferentes, la mayoría de las cuales son bastante populares en el mundo embebido. Todos los paquetes base que permiten al sistema operativo realizar las tareas básicas son adecuados para la compilación cruzada, por lo que Linux puede ser tan omnipresente como microcontroladores y Sistemas en Chip (SoC).
Una distribución Linux es un sistema operativo creado a partir de una colección de software, que se basa en el núcleo Linux y, a menudo, en un sistema de gestión de paquetes. La distribución puede venir como paquetes y binarios precompilados reunidos
por los mantenedores de la distribución, o como fuentes emparejadas con instrucciones sobre cómo compilarlas (cruzadas).
En el dominio embebido, dado que la plataforma de hardware suele ser personalizada, el diseñador de sistemas operativos generalmente prefiere generar la distribución desde cero, a partir de fuentes. Esto le da al diseñador el control absoluto de lo que termina en el producto
. Además, el ingeniero del Paquete de Soporte de placa (BSP) modifica el código de bajo nivel para que la funcionalidad principal del sistema operativo funcione en el producto de hardware específico.
Reunir todos los componentes de software necesarios para generar la distribución de Linux para un producto embebido en particular solía ser una pesadilla, pero afortunadamente este ya no es el caso.
Muchos han compartido con la comunidad de código abierto las fuentes de sistemas de compilación capaces de obtener todos los componentes de software de Internet, compilarlos y vincularlos, hasta la generación de imágenes de instalación de sistemas operativos completos. Algunas empresas están desarrollando y manteniendo su propio sistema de compilación, otras compilan solo algunos de los componentes principales y luego toman binarios prediseñados para finalizar el sistema operativo.
En 2010, un grupo de trabajo de la Fundación Linux comenzó a abordar herramientas y procesos para permitir la creación de distribuciones Linux para software embebido (también conocido como Linux Embebido). Este grupo de trabajo, conocido como el Proyecto Yocto, se alineó con Open Embedded, un marco con objetivos similares.
El Proyecto Yocto es un proyecto de código abierto cuyo objetivo es mejorar el proceso de desarrollo de software para distribuciones Linux embebidas. El Proyecto Yocto proporciona herramientas, metadatos y procesos interoperables que permiten el desarrollo rápido y repetible
de sistemas embebidos basados en Linux.
El proyecto Yocto está actualmente alimentando las distribuciones de Linux más populares para sistemas embebidos, a un punto donde a veces los términos «Linux Embebido» y «Proyecto Yocto» se confunden fácilmente como sinónimos. Yocto no es una distribución de Linux integrada, crea una personalizada para ti.
Diseño de meta-capas de Yocto
La versión moderna de la arquitectura de Yocto se basa en meta-capas, que son directorios que contienen archivos de configuración y reglas sobre cómo compilar y ensamblar distribuciones de Linux para sistemas embebidos.
Generalmente, pero no siempre, una meta-capa vive en su propio repositorio git, y proporciona:
- sus propios paquetes (definidos por recetas, archivos. bb),
- modificaciones a paquetes proporcionados por otras meta-capas (.archivos bbappend),
- máquinas (.archivos conf),
- archivos de configuración (.archivos conf),
- código común (.archivos bbclass), licencias
- ,
- y otros bits y piezas menores.
Una sola meta-capa normalmente aborda un propósito específico. Por lo tanto, para lograr un completo sistema de trabajo, más meta-capas deben ser combinados.
Versiones selección y coincidencia
Al unir diferentes componentes de software, es necesario tener en cuenta la versión de cada componente, ya que la versión incorrecta puede no funcionar bien junto con los otros componentes o incluso romper el sistema.
El proyecto Yocto proporciona versiones de componentes conocidos por funcionar bien juntos, pero ese es solo el punto de partida para su producto.
El núcleo Linux es una gran parte de código que necesita exponer las interfaces correctas al espacio de usuario, y debe contener los controladores correctos, para que el sistema funcione correctamente. Por lo tanto, el papel del proveedor de silicio se ha vuelto cada vez más importante en estos días, ya que generalmente tienen sus propios repositorios de desarrollo para el núcleo Linux y el gestor de arranque, por lo tanto, son las mejores personas para armar un sistema base de trabajo basado en su tecnología.
repo de Google
Desarrollado originalmente para hacer frente a la multitud de repositorios Git en un proyecto Android, repo también se ha vuelto muy popular entre los desarrolladores de Yocto.
Repo es una herramienta construida sobre Git; utiliza un «archivo de manifiesto» para clonar y extraer un conjunto de repositorios Git al mismo tiempo.
Un manifiesto de repositorio es an .documento xml que contiene referencias a repositorios git (junto con sus versiones), repo puede usar el manifiesto para rellenar un directorio con todas las fuentes procedentes de varios repositorios Git necesarios para construir un proyecto.
Además, el repositorio puede usar el mismo manifiesto para controlar (sincronizar) los orígenes del proyecto cuando se realizan cambios en el origen.
Algunos proveedores de silicio proporcionan manifiestos para sus ramas de desarrollo y lanzamiento en estos días, para que los diseñadores puedan comprobar fácilmente el punto de partida de sus propios productos.
Desarrollo de productos basado en Yocto
El ingeniero de BSP generalmente comienza desde el manifiesto de repositorio del proveedor de silicio hasta la comprobación de la versión del software para el diseño de referencia (es decir, un diseño proporcionado por el propio proveedor de silicio o uno de sus socios, que contiene el mismo SoC o similar al en el que se basa el nuevo producto). El ingeniero realiza cambios en el gestor de arranque y en el kernel de Linux para asegurarse de que el hardware seleccionado por el Ingeniero Electrónico tenga un soporte de software adecuado de bajo nivel (por ejemplo, controladores de dispositivo, árbol de dispositivos, configuración del kernel, etc.).).
El propósito del producto es ejecutar una o más aplicaciones, por lo tanto, el ingeniero de BSP/OS se asegura de que todas las dependencias de las aplicaciones se estén creando para el sistema. Los ingenieros que desarrollan la aplicación necesitan un Kit de Desarrollo de Software (SDK) para compilar y vincular la aplicación, por lo tanto, el ingeniero de BSP/OS
les proporcionará dicho kit, y gracias a Yocto esto se ha vuelto bastante sencillo.
Buenas prácticas de Linux incrustadas
Los manifiestos de repositorio utilizados para el desarrollo suelen contener referencias a las ramas de desarrollo, lo que significa que el repositorio obtendrá la confirmación más reciente de esas ramas.
Si usa el mismo manifiesto para obtener el proyecto en una fecha posterior, ¡puede obtener una versión diferente del código! Esto está perfectamente bien para el desarrollo porque desea seguir con la última versión de su proyecto, pero una de sus versiones de desarrollo eventualmente se convertirá en una versión, y por lo tanto necesita «tomar una foto» de esa versión precisa de las fuentes utilizadas para generar la versión de software que se ejecuta en el proyecto. No hacerlo puede exponerlo a problemas legales, ya que no podrá regenerar la misma compilación a partir de fuentes, por lo tanto, no podrá realizar un cambio en una versión específica, lo que obligará al cliente a volver a probar todo el sistema, ya que se verá obligado a corregir el error o agregar la nueva función en la última versión del software.
Además, si no toma esas instantáneas, no hay forma de que pueda ejecutar una bisección en las fuentes del proyecto para averiguar qué confirmación ha roto la funcionalidad que necesita tan desesperadamente. Al diseñar su proceso de desarrollo, encuentre una manera de generar automáticamente manifiestos de repo con confirmaciones precisas en ellos, de modo que pueda guardarlos junto con las versiones para pagar las mismas fuentes nuevamente en una fecha posterior, y hacer lo que se le pague por hacer.
Copiar fuentes internas
También tenga en cuenta que el 99,9% de las fuentes que entran en su producto provienen de la comunidad de código abierto, lo que significa que no tiene garantía de que las mismas fuentes estarán disponibles para descargar nuevamente. Como diseñador, necesitas protegerte de los cambios y errores que se cometen en las fases iniciales. Mantenga una copia de todas las fuentes relevantes en la casa y encuentre una manera de conectarlas de nuevo a su sistema de compilación. Además, es posible que desee reflejar algunos de los repositorios que más usa, ya que a veces los servidores git de origen pueden no estar disponibles de repente. Si no tiene una copia interna, estará atascado hasta que los servidores vuelvan a estar en línea.
En ByteSnap, tenemos una forma totalmente automatizada de lanzar proyectos basados en Yocto, de modo que podemos recuperar las fuentes que entran en una versión, y también, reconstruir la misma versión en una fecha posterior. Guardamos copias de paquetes de código abierto de forma automática, para que no experimentemos tiempos de inactividad causados por servidores defectuosos en todo el mundo. Además, respaldamos todo todos los días para garantizar que no se perderá ningún trabajo, incluso en caso de desastre en el lugar.
Fabrizio Castro
Fab es ingeniero de software sénior. Obtuvo su licenciatura y maestría en el Politécnico de Milán, en Milán, Italia. Tiene 20 años de experiencia en el desarrollo de software integral (servicios, bases de datos, aplicaciones, software científico, firmware, RTOS, controladores de dispositivos, kernel de Linux, etc.).), trabajó en el mundo académico y en la industria. La Fab es coautora de artículos y libros científicos y ha trabajado en patentes. Además de investigación y desarrollo, se especializa en el desarrollo de Linux integrado, entregando diseños de vanguardia que impulsan productos científicos, industriales, comerciales y militares exitosos. Fab también ha sido profesor y ha impartido clases a estudiantes de pregrado en algunas de las universidades más prestigiosas de Europa. Para obtener más información sobre el diseño de ByteSnap, visite http://www.bytesnap.co.uk.