Tutorial de Compilación de Proyecto Yocto para el kit de desarrollo iW-RainboW-G34D

Back To Blog
Imagen de Compilar Proyecto Yocto

 

 

Tutorial de Compilación de Proyecto Yocto para el kit de desarrollo iW-RainboW-G34D

 

Tabla de Contenidos

 

  1. Introducción
  2. Preparación del entorno
  3. Programación de los binarios
  4. Comprobación de arranque e inicialización

 

1. Introducción

Esta Guía de Desarrollo explica paso a paso cómo programar y testear el kit de desarrollo de la SOM iW-RainboW-G34M SODIMM con una distribución de Linux basada en el Proyecto Yocto. Se indica todo lo necesario para configurar correctamente el entorno del sistema operativo para poder generar los binarios a partir de los BSP facilitados por el fabricante.

Kit de desarrollo

Los pasos que se muestran en esta Guía están orientados a crear los archivos necesarios para programar el kit de desarrollo iW-RainboW-G34D del fabricante iWave Systems Technologies. Este fabricante, con sede en la India desde el año 1999, se centra en proporcionar soluciones y servicios integrados para aplicaciones industriales, médicas, automotrices y varias otras aplicaciones informáticas integradas.

iWave Systems ofrece una amplia gama de System On Modules (SOM) y Single Board Computer (SBC) construidas con una amplia gama de plataformas SoC de CPU y FPGA con diferentes factores de forma, como Qseven, SMARC, SODIMM y HPC, en estrecha colaboración con empresas Top del sector de los semiconductores, como NXP, Xilinx , Intel, etc

iW-RainboW-G34D

 

El kit de desarrollo iW-RainboW-G34D está basado en los procesadores de la familia i.MX 8M Mini/Nano ARM Cortex A53 en formato SODIMM del fabricante NXP, y entre sus características más destacadas encontramos las siguientes:

  • i.MX8M Mini SoC
  • WiFi Banda Dual -IEEE 802.11 a/b/g/n/ac con Bluetooth 5.0
  • Display 5.5″ HD AMOLED MIPI DSI
  • GBE, PCIe, 2x USB, 4x UART, 3x ECSPI,GPIOs

Como se puede observar, este kit permite el prototipado rápido para diferentes aplicaciones basadas en la familia i.MX 8M Mini/Nano de procesadores. Entre las aplicaciones a las cuales podemos destinar esta placa SODIMM podemos encontrar: HMI Industrial y Control de Accesos, Puntos de venta móviles Mobile POS y e-commerce seguro, gestión de Energía y gateway IoT, control Industrial y Automatización, equipos Médicos y de Salud, aplicaciones Inteligentes y otros consumibles.

En la siguiente imagen podemos ver el diagrama de bloques de este kit de desarrollo y cómo odemos sacarle el máximo partido a todas las interfaces disponibles.

Diagrama de bloques del kit de desarrollo con la SOM i.MX8M Mini/Nano SODIMM

2. Preparación del entorno

A través de esta sección se irán explicando los pasos a seguir para la correcta configuración del entorno de desarrollo desde el que se realizará la compilación. Todas las instrucciones que se muestran están basadas en la versión de Ubuntu 18.04.6 LTS. Para poder trabajar en un entorno perfectamente configurado, se recomienda el uso de Máquinas Virtuales, mediante las cuales podremos instalar la distribución de Linux necesaria para poder realizar la compilación.

En este manual se explicará como generar los archivos necesarios para la distribución de Linux basada en el Proyecto Yocto para cargar en la plataforma iW-RainboW-G34M SODIMM, así como el U-Boot y la herramienta de flasheo UUU. Tendremos que hacer uso de los BSP que el fabricante de la placa nos facilita. El BSP de Linux es la colección de binarios, código fuente y archivos de soporte que se pueden usar para crear una imagen del kernel de Linux y un sistema de archivos raíz para la plataforma iW-RainboW-G34M SODIMM.

Proyecto Yocto

El Proyecto Yocto es un proyecto colaborativo de código abierto de la Fundación Linux el cual proporciona un conjunto de herramientas flexibles para crear distribuciones de Linux personalizadas para dispositivos embebidos e IoT, incluyendo un soporte para las principales arquitecturas de CPU, como ARM, MIPS, PowerPC y x86/x86-64.

Una parte importante de este proyecto es el sistema de construcción OpenEmbedded, que es un marco de automatización de compilación y un entorno de compilación cruzada. Esto permite a los desarrolladores crear su propia distribución de Linux específica para su entorno. El Proyecto Yocto y el Proyecto OpenEmbedded comparten el mantenimiento de las partes principales del sistema de construcción OpenEmbedded: el motor de construcción, BitBake, y el núcleo de metadatos, OpenEmbedded-Core. El Proyecto Yocto proporciona una implementación de referencia llamada Poky, que contiene el sistema de compilación de OpenEmbedded además de un gran conjunto de recetas, organizadas en un sistema jerárquico de capas, que puede utilizarse como una plantilla totalmente funcional para un sistema operativo embebido personalizado.

    • Bitbake: Herramienta principal del sistema de compilación OpenEmbedded
      BitBake desempeña el papel de motor del sistema de compilación y es responsable de analizar los metadatos, generar listas de tareas a partir de ellos y luego realizar estas tareas.

 

    • Sistema de compilación OpenEmbedded que se mantiene conjuntamente con OpenEmbedded Project.
      OpenEmbedded-Core (OE-Core) son metadatos compuestos de recetas (recipes)básicas, clases y archivos relacionados. Estos metadatos están diseñados para ser comunes en muchos sistemas derivados de OpenEmbedded diferentes (incluidos los proyectos de Yocto).

 

  • Poky: una distribución de referencia.
    Poky es el nombre de la distribución de referencia o sistema operativo de referencia del proyecto Yocto. Esto incluye el sistema de compilación OpenEmbedded (BitBake y OpenEmbedded-Core) y un conjunto de metadatos para ayudarlo a comenzar a crear nuestra propia distribución. Poky usa OpenEmbedded Build System para construir un pequeño sistema operativo integrado, además de ser una capa de integración sobre OE-Core y que proporciona lo siguiente:

    • Un nivel básico de infraestructura de distribución para ilustrar cómo personalizar la distribución.
    • Un medio para verificar los componentes del Proyecto Yocto.

Relación entre Proyecto Yocto, Poky y OpenEmbedded

El proyecto Yocto utiliza los BSP (Board Support Packages), que contienen un conjunto de software y recetas de compilación que están listas para usar en placas y arquitecturas específicas. Por ejemplo, para en nuestro caso, nos descargaremos los BSP que el fabricante iWave nos proporciona para utilizar específicamente con la placa iW-RainboW-G34D. Estos BSP incluyen las recetas necesarias para incluir todas las funciones que el hardware de la placa puede proporcionarnos. Esto también hace que sea extremadamente sencillo mantener el software actualizado porque las herramientas descargan automáticamente las últimas versiones de los repositorios en línea.

Entorno de desarrollo del proyecto Yocto

Paquetes de desarrollo

Para poder hacer uso del Proyecto Yocto en un equipo con Linux, debemos instalar una serie de paquetes y herramientas definidas, y para ello debemos ejecutar las siguientes instrucciones:

sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev util-linux srecord

sudo apt-get install xterm sed cvs subversion coreutils texi2html docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl lzop asciidoc

sudo apt-get install cpio python python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa xsltproc fop dblatex xmlto pylint3 repo

sudo apt-get install u-boot-tools

Tras la instalación de estas herramientas necesarias para hacer uso del Proyecto Yocto, prepararemos el resto del entorno.

El fabricante iWave nos proporciona los BSP necesarios a través de Github, y para ello necesitamos tener instalada la herramienta repo para poder gestionar el proyecto en el repositorio de Github.

mkdir ~/bin

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

chmod a+x ~/bin/repo

export PATH=~/bin:$PATH

Descarga y compilación del proyecto

Con la herramienta repo preparada, nos descargaremos el proyecto en nuestro equipo:

mkdir iwg34-release-bsp; cd iwg34-release-bsp

git config –global user.name «Your Name»

git config –global user.email «Your Email»

repo init -u https://github.com/iwave-git-imx8mm-8mn/imx-manifest.git -b imx8mm_8mn -m imx-5.4.24-2.1.0.xml

repo sync

Descarga del proyecto

Tras descargarnos el proyecto, todas las capas del Proyecto Yocto estarán alojadas en el directorio

~/<path to iwg34-release-bsp>/iwg34-release-bsp/sources

A continuación, antes de comenzar con la compilación, debemos realizar la configuración para la plataforma sobre la que vamos a trabajar. En nuestro caso es la iW-RainboW-G34D de 1GB de memoria RAM. Para ello ejecutamos la siguiente instrucción:

DISTRO=fsl-imx-xwayland MACHINE=imx8mm-iwg34m source imx-setup-release.sh -b build-imx8mm-1gb

Configuración de la máquina de destino para compilar

Una vez realizada la configuración, pasamos a utilizar la herramienta Bitbake para realizar la compilación de la imagen completa:

bitbake imx-image-full

En caso de tener que volver a re-compilar la imagen, usaremos:

bitbake -f imx-image-full

Compilación del proyecto

Tras haber completado el proceso de compilación, que puede llegar a tardar varias horas según la máquina sobre la que se esté trabajando, tendremos los binarios organizados en el siguiente directorio

~/<path_to_iwg34-release-bsp>/iwg34-release-bsp/build-imx8mm-1gb/tmp/deploy/images/imx8mm-iwg34m/

Los archivos generados son los siguientes:

  • imx-image-full-imx8mm-iwg34m-<date&time>.rootfs.tar.bz2
  • imx8mm-iwg34d–5.4-r0-imx8mm-iwg34m-<date&time>.dtb
  • Image—5.4-r0-imx8mm-iwg34m-<date&time>.bin
  • imx-boot-imx8mm-iwg34m-sd.bin-flash_iwg34m

Para programar la SOM iW-RainboW-G34M SODIMM debemos renombrar los archivos para la programación de la placa.

  • imx-image-full-imx8mm-iwg34m-<date&time>.rootfs.tar.bz2 –> rootfs.tar.bz2
  • imx8mm-iwg34d–5.4-r0-imx8mm-iwg34m-<date&time>.dtb –> imx8mm-iwg34d.dtb
  • Image—5.4-r0-imx8mm-iwg34m-<date&time>.bin      –> Image
  • imx-boot-imx8mm-iwg34m-sd.bin-flash_iwg34m      –> flash.bin

En este punto ya tendríamos los archivos necesarios para poder cargar los binarios en la placa.

3. Programación de los binarios

Herramienta UUU

La herramienta a utilizar para cargar en la placa la imagen generada del Proyecto Yocto es la conocida como UUU (Universal Update Utility), una evolución de MFGTools. Mediante el uso de UUU y sus comandos, podremos cargar las imágenes en plataformas con los chips de la familia de procesadores I.MX del fabricante NXP.

Requisitos para flashear

Para iniciar el proceso de flasheo, debemos tener en cuenta los siguientes requisitos:

  • eMMC o una tarjeta SD (En este manual flashearemos la memoria eMMC para que la placa arranque en este modo por defecto)
  • Archivos binarios (flash.bin, Image, imx8mm-iwg34d.dtb, rootfs.tar.bz2)
  • Cable USB tipo A a micro B para la programación con UUU
  • Ubuntu 18.04 o superior, 64bit o Windows 10 (En este manual nos centraremos en la opción de Ubuntu)
  • Requisitos de memoria para el dispositivo de arranque como en la siguiente imagen

Disposición de la memoria del dispositivo

Pasos para flashear

    • Primeramente hay que cambiar la configuración del modo de arranque, y configurarlo en el modo Serial Downloader Mode. Para ello debemos consultar el manual de descripción Hardware que nos proporciona iWave, con el fin de conocer toda la información necesaria respecto al kit iW-RainboW-G34D.

Switch para configurar el modo de arranque

    • Conectamos el cable USB al puerto de debug y al PC con Ubuntu en el que estemos trabajando, y encendemos la placa. Tras esto, conectaremos otro cable USB entre el PC y el puerto USB OTG de la placa. De esta manera, el equipo estará preparado para la programación.
    • Usaremos la aplicación UUU que iWave nos proporciona. Para ello extraemos la herramienta UUU:

cd <path_to_iW-RainboW-G34M-RX.X-RELX.X-Linux5.4.24-YoctoZeus_Deliverables/UUU-Tool>

tar -xvf iW-RainboW-G34M-i.MX_8M_Mini_SODIMM_SOM-RX.X-RELX.XX-Linux5.4.24-UUU.zip

    • Copiamos los archivos binarios generados en la siguiente ruta

~/<path_to_iW-RainboW-G34M-i.MX_8M_Mini_SODIMM_SOM-RX.X-RELX.XX-Linux5.4.24-UUU>/Linux/

Archivos preparados para el flasheo

    • Para flashear, entramos en la ruta donde se encuentra la herramienta UUU y ejecutamos el script para iniciar el flasheo, usando como parámetros eMMC y 1GB.

cd <path_to_iW-RainboW-G34M-i.MX_8M_Mini_SODIMM_SOM-RX.X-RELX.XX-Linux5.4.24-UUU>

./iW-RainboW-G34M.sh

Cargando la configuración para flashear

Proceso de flasheo

4. Comprobación de arranque e inicialización

Tras haber completado el proceso de flasheo, apagamos el dispositivo y volvemos a cambiar los switches de selección del modo de arranque para cargar desde la memoria. Una vez hecho esto, conectamos la placa al puerto de debug para conectarnos a través del puerto serie y comprobar el correcto flasheo y la carga satisfactoria de la imagen que hemos cargado.

Para ello usaremos la herramienta minicom para conectarnos, usando la siguiente configuración:

  • Baud Rate : 115200
  • Data bits : 8
  • Parity : None
  • Stop Bits : 1
  • Flow Control : None

Configuración en minicom

Con la configuración correctamente fijada, encendemos la placa y vemos cómo comienza el proceso de carga de la placa

Arranque del equipo

Cargando el kernel

Kit de desarrollo arrancando

Kit de desarrollo arrancando

Kit de desarrollo arrancando

Sistema cargado

Tras haber seguido los pasos que se muestran en este manual, se ha compilado una imagen de Linux personalizada específicamente para el kit de desarrollo iW-RainboW-G34D, pudiendo hacer uso de todas las características que esta dispone.

 

    Contacta con nosotros:


    Madrid: +34 91 366 01 59
    Barcelona: +34 93 224 02 83

    Bilbao: +34 94 463 60 66
    Portugal: +351 219 376 267