El Proyecto Yocto: Instalado y Funcionando en el ODROID-C2

El proyecto Yocto es un proyecto de código abierto que proporciona un conjunto de herramientas flexibles para crear distribuciones de Linux integradas personalizadas para dispositivos embebidos y IoT. Incluye soporte para las principales arquitecturas de CPU que predominan en la industria embebida. A través de la colaboración, se crean flujos de trabajo en toda la industria para los desarrolladores que permiten el intercambio de tecnologías y pilas de software. Los mismos flujos de trabajo, plantillas de infraestructura y configuraciones también proporcionan un lugar para alojar capas BSP. Las versiones del proyecto Yocto son publicadas cada seis meses, en abril y octubre.

Este artículo describe los componentes fundamentales y el proceso para compilar una imagen Linux ODROID-C2 personalizada. Estos mismos pasos se pueden usar en otras máquinas ODROID. Yocto es la herramienta estándar de la industria para la creación de sistemas embebidos Linux personalizados y complejos que utilizan las últimas tecnologías de código abierto como Qt5, QtWebEngine y Grafana.

Configuración del sistema host y requisitos previos

El proyecto Yocto requiere un sistema de compilación basado en Linux y es compatible con las principales distribuciones de escritorio y de servidor Linux, tienes una lista de distribuciones compatibles en https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#detailed-supported-distros. El sistema de compilación Yocto compila la mayor parte de los paquetes dependientes del sistema host, lo cual proporciona una mayor coherencia entre las diferentes distribuciones Linux. Sin embargo, se espera que ciertos paquetes estén preinstalados en el sistema de compilación del sistema host. Para un sistema como Debian, se debe instalar los siguientes paquetes:

$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping
Tienes una lista completa de los requisitos del sistema de desarrollo host https://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html#qs-native-linux-build-host.

Obtención de las Fuentes

El proyecto Yocto usa el concepto de capas para crear el espacio de trabajo. La capa central proporciona todas las piezas comunes y las capas adicionales cambian la pila de software según sea necesario. Las siguientes instrucciones se basan en el maestro en sentido ascendente; sin embargo, también es posible usar una rama de la versión, por ejemplo, "sumo" o más nuevo.

$ git clone -b master git://git.yoctoproject.org/poky.git yocto-odroid
$ cd yocto-odroid
Descargar la capa BSP ODROID:
$ git clone -b master git://github.com/akuster/meta-odroid
Inicia la configuración:
$ source yocto-odroid/oe-init-build-env
Ahora tenemos un espacio de trabajo común con una capa básica donde podemos compilar un emulador y las imágenes basadas en la placa de referencia, por ejemplo, qemuarm. A continuación, podemos agregar la capa BSP ODROID en el proyecto para que podamos realizar compilaciones para las placas ODROID:
$ bitbake-layers add-layer ../meta-odroid
A continuación, Selecciona el ODROID-C2 como nuestra máquina:
$ echo 'MACHINE = "odroid-c2"' >> conf/local.conf
El espacio de trabajo ahora está listo para empezar una compilación.

Compilación

El sistema de compilación del proyecto Yocto proporciona algunas imágenes de referencia a modo de ejemplo para varios posibles usos. Nosotros vamos a compilar una imagen gráfica basada en X11 y Matchbox. Existen varias imágenes de referencia adicionales disponibles en https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#ref-images.

$ bitbake core-image-sato
Esta compilación llevará un tiempo dependiendo de la potencia de la máquina de compilación y puede tardar entre 20 minutos y varias horas.

Grabando una tarjeta SD

Tras una compilación exitosa, los ítems de la compilación son almacenados en el directorio "tmp/deploy/images/odroid-c2". Se puede usar una herramienta como Etcher para crear una tarjeta SD de arranque. Esto también se puede hacer usando la línea de comandos shell, con dd. Sin embargo, se debe tener mucho cuidado ya que, si se eliges el dispositivo incorrecto, puedes sobrescribir un disco duro que pertenezca al sistema host de compilación.

$ cd tmp/deploy/images/odroid-c2
$ xzcat core-image-sato-odroid-c2.wic.xz | sudo dd of=/dev/sdX bs=4M iflag=fullblock oflag=direct conv=fsync status=progress
Asegúrate de que sdX apunta a la tarjeta SD montada, esto puede confirmarse con dmesg una vez insertada la tarjeta
% dmesg|tail                                                                                                
[  +0.000149] scsi host6: usb-storage 4-4:1.0
[  +0.000077] usbcore: registered new interface driver usb-storage
[  +0.002803] usbcore: registered new interface driver uas
[  +1.005024] scsi 6:0:0:0: Direct-Access     TS-RDF5  SD  Transcend    TS37 PQ: 0 ANSI: 6
[  +0.291506] sd 6:0:0:0: [sdb] 15523840 512-byte logical blocks: (7.95 GB/7.40 GiB)
[  +0.000682] sd 6:0:0:0: [sdb] Write Protect is off
[  +0.000003] sd 6:0:0:0: [sdb] Mode Sense: 23 00 00 00
[  +0.000688] sd 6:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
Figura 1 – UI Yocto Project Sato ejecutándose en ODROID-C2

Capa BSP ODROID

La capa BSP ODROID es compatible con varias máquinas ODROID, sobre todo con el kernel y el cargador de arranque (u-boot) basado en fuentes ascendentes. Hay un ejemplo de configuración de máquina para el ODROID-C2, odroid-c2-hardkernel, que utiliza un Kernel y u-boot compatibles con Hardkernel.

Figura 2 - Máquina ODROID compatible con Yocto Project

A día de hoy, los siguientes elementos BSP son compatibles:

  • Linux estándar - 4.14(LTS) and 4.16
  • Linux HardKernel - 3.14(EOL) y 3.16(LTS)
  • U-Boot - 2018.01 así como u-boot-hardkernel 2015.10
  • Mali 450 drivers pre-compilados r6p1 y Mali t62x drives pre-compilados r10p0_00rel0
  • El Soporte para el módulo LCD de 3.5” de Hardkernel ha sido añadido además de odroid-lcd35

Liberando el Ecosistema del Proyecto Yocto

Hay muchas capas disponibles (consulta el Índice de capas en http://layers.openembedded.org/layerindex/branch/master/layers/) que se pueden añadir para crear imágenes más complejas. Por ejemplo, puede agregar la capa meta-qt5 para compilar un sistema basado en Qt5 utilizando la tecnología QtWebEngine para sistemas kioscos. La Figura 3 muestra un cuadro de mandos Grafana ejecutándose en un Navegador Kiosco creado usando QtWebEngine en ODROID-C2, todo compilado desde la fuente usando el Proyecto Yocto.

Panel de control Grafana en QtWebEngine ejecutándose en ODROID-C2 creado con el Proyecto Yocto

Be the first to comment

Leave a Reply