Guía del Proyecto Yocto de código abierto
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.