Software embebido - Yocto construir Raspberry Pi 4 una captura de pantalla de una computadora

Yocto compila Raspberry Pi 4

en un entorno Docker

Guía del Proyecto Yocto de código abierto

consejos de configuración de Linux personalizado en Raspberry Pi con Docker

Guía de código abierto de Yocto Project para Linux personalizado en Raspberry Pi con consejos de configuración de Docker

Sumérjase en el Proyecto Yocto para sistemas Linux personalizados en cualquier hardware. Perfecto para desarrolladores y entusiastas de los sistemas integrados . ¡Empieza a construir ahora!

Explore el Proyecto Yocto, una iniciativa de código abierto para crear sistemas Linux personalizados para cualquier arquitectura de hardware. Aprenda a usar CROPS para el desarrollo multiplataforma, configure contenedores de Docker y cree imágenes de Linux personalizadas para dispositivos integrados y de IoT. Nuestra guía cubre la configuración en macOS, la configuración de entornos de compilación y la optimización para Raspberry Pi. Tanto si es un principiante como un experto, encuentre las mejores prácticas, herramientas y apoyo de la comunidad para las necesidades de su proyecto de Linux.

Yocto ejecutándose en un contenedor Docker

En los documentos de Yocto se incluye un capítulo (2.2.2.) para configurar CROssPlatformS (CROPS) como alternativa para configurar un PC nativo con Linux. Esta alternativa utiliza el contenedor Docker para crear una imagen de sistema personalizada, por ejemplo, para la Raspberry Pi.

Lamentablemente, la documentación para configurar este entorno para mí en Mac OS X (Monterey) tiene algunos pequeños errores.

Configurar el contenedor Docker para Mac OS X

Para utilizar CROPS Docker en Linux, Windows y Mac OS X, se requieren determinados ajustes especiales. Antes de configurar el contenedor para Yocto, debes crear un volumen Docker para almacenar los resultados. También se utiliza un contenedor Docker Samba para proporcionar los archivos en Mac OS X.

Crear un volumen Docker

Introduce los siguientes comandos en la ventana del terminal:

docker volume create --name raspberry
docker run -it --rm -v raspberry:/workdir busybox chown -R 1000:1000 /workdir

Crear y ejecutar un contenedor Samba

OS X no te dejará conectarte a un recurso compartido de Samba que se ejecute a nivel local. Por lo tanto, primero debes crear un alias para 127.0.0.1 de 127.0.0.2.

sudo ifconfig lo0 127.0.0.2 alias up

A continuación, crea el contenedor Samba, que te permite ver los archivos en el volumen Docker:

docker create -t --expose 445 -p 127.0.0.2:445:445 --name samba -v raspberry:/workdir crops/samba

Como siempre necesitarás tener el alias para conectarte al contenedor Samba, podrías combinar el principio de Samba y el alias de esta forma:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

Ahora puedes abrir el workdir en el explorador de archivos. Pulsa «Command-K» en el buscador, escribe «smb://127.0.0.2/workdir» en el cuadro de dirección del servidor y haz clic en «Conectar». Ahora deberías ver el contenido del volumen Docker en el buscador.

Crear e iniciar el contenedor Yocto

Sigue estos pasos para crear o iniciar el tipo de contenedor Yocto en la ventana del terminal:

docker run --rm -it --name=crops-poky -v raspberry:/workdir crops/poky:ubuntu-20.04 --workdir=/workdir

Configurar el entorno de desarrollo en el contenedor

Al iniciar el contenedor Docker, aparecerá la siguiente notificación en el terminal: «pokyuser@d4ddfe042587:/workdir».

Ahora puedes configurar el entorno de desarrollo.

Clonar la versión Poky

En mi caso, utilizo la versión 3.4 de Yocto con el nombre «Honister» porque las capas de meta-raspberry no están disponibles para versiones Poky más recientes en este momento. Para comenzar, debes clonar el repositorio Poky:

git clone -b honister git://git.yoctoproject.org/poky poky-honister

Sigue estos pasos para actualizar Poky a la última versión:

cd poky-honister
git pull --all --prune

Capas meta adicionales para Raspberry Pi

Cambia a «poky-honister» y clona los siguientes repositorios: meta-raspberry, meta-openembedded y, en caso de ser necesario, meta-qt5

cd poky-honister
git clone -b honister git://git.yoctoproject.org/meta-raspberrypi
git clone -b honister git://git.openembedded.org/meta-openembedded
git clone -b honister https://github.com/meta-qt5/meta-qt5.git

Configurar los ajustes de desarrollo

Sal del directorio poky-honister para estar en el /workdir. Ahora, obtén el entorno de desarrollo con el script oe-init-build-env.

cd ..
source poky-honister/oe-init-build-env rpi-build

Se crea un nuevo directorio «rpi-build» (puedes ponerle el nombre que quieras) y un directorio conf con los archivos bblayers.conf, local.conf y templateconf.cfg.

Como no hay ningún editor de texto instalado en el contenedor, debes editar los archivos de configuración en el volumen Samba montado en Mac OS X o instalar un editor de texto en el contenedor. Para hacerlo, debes abrir una segunda ventana en el terminal (mientras se esté ejecutando el contenedor Yocto) e iniciar una shell bash en el contenedor con privilegios de root:

docker exec -it --user=root crops-poky bash
apt-get install nano
exit

A continuación, puedes editar los archivos de configuración en el contenedor Yocto como pokyuser.

Nota

El editor no está instalado permanentemente. Después de salir del contenedor y volver a entrar, hay que volver a instalarlo

Primero añade el meta-raspberry en el archivo bblayers.conf

nano conf/bblayers.conf

Añade «/workdir/poky-honister/meta-raspberrypi \» para que parezca

BBLAYERS ?= " \
  /workdir/poky-honister/meta \
  /workdir/poky-honister/meta-poky \
  /workdir/poky-honister/meta-yocto-bsp \
  /workdir/poky-honister/meta-raspberrypi \
  "

y guárdalo.

Segunda edición del local.conf

Edita el archivo local.conf:

nano conf/local.conf

Cambia las siguientes líneas:

  • MACHINE ??= "qemux86-64" -> MACHINE ??= "raspberrypi4-64"

Dependiendo de la Raspberry que quieras utilizar (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, etc)

Descomenta las siguientes líneas:

  • DL_DIR ?= "${TOPDIR}/downloads"
  • SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
  • TMPDIR = "${TOPDIR}/tmp"

Añade las siguientes líneas al final, para que una sdimg parpadee en una tarjeta SD:

  • IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
  • SDIMG_ROOTFS_TYPE = "ext4.xz"

Guarda el archivo local.conf.

BitBake para la primera imagen

Ahora dispones de una configuración mínima para crear la primera imagen:

bitbake -k core-image-minimal

En la documentación de Yocto encontrarás una breve descripción de las descripciones de imágenes disponibles.

Por ejemplo:

  • core-image-minimal: una pequeña imagen capaz de permitir que un dispositivo arranque.
  • core-image-base: una imagen solo para consola totalmente compatible con el hardware del dispositivo de destino.
  • core-image-full-cmdline: una imagen solo para consola con más funciones completas del sistema de Linux instaladas.

Después de un tiempo (que podrían ser varias horas la primera vez), el BitBake termina y el archivo sdimg se muestra en el siguiente directorio:

/workdir/rpi-build/tmp/deploy/images/raspberrypi4-64

Configuraciones adicionales

Configuraciones adicionales de hardware de la Raspberry

Para establecer configuraciones de hardware específicas, puedes echar un vistazo a extra-apps.md y extra-build-config.md. También encontrarás estos archivos en el directorio meta-raspberrypi/docs.

La capa meta también proporciona una configuración de imagen «rpi-test-image» para utilizar con BitBake. La imagen se basa en «core-image-base» que incluye la mayoría de los paquetes en meta-raspberrypi y algunas muestras de medios.

bitbake -k rpi-test-image

Configuraciones de software adicionales

En función de la configuración de compilación de imágenes que estés utilizando, es posible que tengas que instalar paquetes de software adicionales.

Para hacerlo, añade algunas configuraciones al archivo local.conf.

Por ejemplo, añade las siguientes líneas para configurar ssh-server, pi-user y systemd:

## packages
IMAGE_INSTALL:append = " openssh-sftp-server sudo python3 python3-pip rpi-gpio raspi-gpio"
IMAGE_FEATURES:append = " ssh-server-openssh"

## systemd settings
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME:init_manager = "systemd"
VIRTUAL-RUNTIME:initscripts = ""
IMX_DEFAULT_DISTRO_FEATURES:append = " systemd"

O añade python:

IMAGE_INSTALL:append = " python3 python3-pip rpi-gpio raspi-gpio"

Nota

El espacio inicial en « python3 python3-pip rpi-gpio raspi-gpio» es importante, porque el teto se anexa a la configuración existente y necesita separarse con este espacio.

Licencia de copyright

Copyright© 2022 Interelectronix e.K.
El código fuente de este Proyecto está autorizado en virtud de la licencia GPL-3.0.

Agradecimientos

Fuentes utilizadas para crear estas instrucciones:

Gracias a todos.