Linux se ha convertido en una utilidad confiable para crear sistemas operativos para sistemas integrados. Sin embargo, la curva de aprendizaje para las utilidades de desarrollo integradas puede ser bastante desafiante. Muchas personas que usan estas herramientas complejas han dedicado mucho tiempo a comprenderlas y dominarlas, y Yocto no es diferente. Con él, puede desarrollar una distribución Linux mínima personalizada para su proyecto de sistema integrado.
Esta publicación le brindará una guía paso a paso sobre cómo comenzar con Yocto para crear una distribución mínima de Linux.
El Proyecto Yocto
Yocto es un proyecto colaborativo de código abierto destinado a crear herramientas, plantillas y procesos necesarios para desarrollar sistemas personalizados basados en Linux para sistemas integrados a pesar de la arquitectura de hardware subyacente. Yocto se lanzó en marzo de 2011 como una colaboración de 22 organizaciones, incluida OpenEmbedded, que actúa como su sistema de compilación.
El resultado de la compilación del Proyecto Yocto consta de tres componentes principales:
- Binarios de tiempo de ejecución de destino: Este contiene todos los archivos auxiliares necesarios para implementar Linux en el sistema de destino. Otros archivos incluyen el gestor de arranque, el kernel, los módulos del kernel, la imagen del sistema de archivos raíz.
- Feed del paquete: Esto se refiere a los paquetes de software necesarios para su sistema. También puede seleccionar el administrador de paquetes que necesita para su sistema:deb, dnf, ipk, etc. Puede incluir dichos paquetes en los archivos binarios de tiempo de ejecución de Target o agregarlos más tarde al sistema ya implementado.
- SDK de destino: Estas son las bibliotecas y los archivos de encabezado que muestran el sistema instalado en el destino. Los desarrolladores de aplicaciones los utilizan principalmente para asegurarse de vincular las bibliotecas correctas según el sistema.
¿Por qué no usamos una distribución existente?
Inicialmente, los sistemas integrados usaban distribuciones estándar y trataban de personalizarlas para satisfacer sus necesidades. Eso incluyó la eliminación de paquetes innecesarios para optimizar el almacenamiento y mejorar la seguridad. Tener software muerto puede hacer que un sistema sea vulnerable a varios vectores de ataque. Incluso con estas ventajas, el uso de la distribución existente planteó varios desafíos.
Una es que todo el proceso de desmontar los paquetes no fue fácil. La eliminación de algunos paquetes podría romper las dependencias de varios otros paquetes que podrían serle útiles. Además, algunos paquetes se integraron con el proceso de arranque y tiempo de ejecución, lo que hizo que su eliminación fuera tediosa.
Por lo tanto, la distribución existente a menudo generaba demoras innecesarias o un sistema que no cumplía con todos los estándares requeridos.
Comencemos.
Creando tu propia distribución de Linux usando Yocto
Paso 1:Requisitos de hardware y sistema operativo
- Mínimo de 4 gb de RAM (cuanto más, mejor)
- Ubuntu OS más reciente (20.04 LTS) o cualquier otro sistema operativo Linux:
- Fedora
- abrir SUSE
- Cent OS
- Debian
- Mínimo de 100 GB de espacio libre en el disco duro (un tamaño mayor garantizará un mejor rendimiento). Yocto puede consumir bastantes recursos, según el producto final de destino.
Si es usuario de macOS o Windows, use un software de virtualización como VMware o Virtualbox para ejecutar una distribución de Linux. Alternativamente, puede optar por un arranque múltiple.
Paso 2:configurar el host
Primero instale las dependencias requeridas en nuestro sistema host. Para esta publicación, estoy usando la distribución de Ubuntu. Si está ejecutando otra distribución, consulte la guía de inicio rápido de Yocto Project y vea qué dependencias instalar.
Inicie la Terminal y ejecute los siguientes comandos:
sudo apt update
sudo apt-get install wget git-core unzip make gcc g++ build-essential subversion sed autoconf automake texi2html texinfo coreutils diffstat python-pysqlite2 docbook-utils libsdl1.2-dev libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev xsltproc desktop-file-utils chrpath groff libtool xterm gawk fop
Paso 3:Clona el Yocto Poky
Con las dependencias instaladas, podemos proceder a descargar Yocto. Clonaremos el repositorio de Yocto desde la web del Proyecto Yocto. Ejecute el siguiente comando, que descargará la última versión (la rama "sumo"). Crearemos un directorio en la carpeta Inicio para construir nuestro proyecto Yocto para facilitar el acceso y la coherencia.
mkdir ~/yocto mkdir ~/yocto/Project-One/ cd ~/Yocto/Project-One/ git clone -b sumo git://git.yoctoproject.org/poky.git
Si obtiene un error como "comando git no encontrado", eso significa que no tienes git instalado en tu sistema. Ejecute el siguiente comando para instalarlo.
sudo apt install git
Paso 4:inicialice el entorno construido.
Para comenzar con Yocto, debemos inicializar el "entorno de compilación". Ejecute los comandos a continuación. El primero cambiará el directorio a la carpeta que acabamos de clonar. El segundo comando inicializará el "entorno de compilación".
cd ~/Yocto/Project-One/poky
source oe-init-build-env build
Una vez completada la inicialización, tendremos un directorio de compilación y un archivo de configuración. El directorio de construcción es donde ocurre toda la construcción del sistema y aloja los archivos de imágenes una vez que se completa el proceso. En realidad, después de la inicialización, la Terminal apuntará automáticamente a la carpeta de compilación. Puedes verlo en la imagen de arriba.
Paso 5:Configuración
Cuando ejecuta un comando ls en el directorio /build, verá una carpeta /conf que contiene todos nuestros archivos de configuración. Navegue a esta carpeta con el siguiente comando:
$ cd ~/Yocto/Project-One/poky/build/conf/ $ ls
Al ejecutar el comando ls en la carpeta conf, debería ver el archivo local.conf. Este archivo especifica los detalles de la máquina de destino y el SDK para la arquitectura de destino deseada.
Abra este archivo para editarlo con el siguiente comando:
$ sudo nano local.conf
De la imagen a continuación, la máquina de compilación de destino es "qemux86-64".
Ahora, proceda a descomentar las siguientes líneas, como se muestra en la imagen a continuación. (Al descomentar, nos referimos a eliminar el signo '#')
DL_DIR ?= "${TOPDIR}/downloads" SSTATE_DIR ?= "${TOPDIR}/sstate-cache" TMPDIR ?= "${TOPDIR}/tmp" PACKAGE_CLASSES ?= "package_rpm" SDKMACHINE ?= "i686" EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
Antes de continuar con el proceso de compilación, agregue las siguientes líneas al final del archivo 'local.conf'.
BB_NUMBER_THREADS = "X" PARALLEL_MAKE = "-j X"
Reemplazar 'X' con el doble de la cantidad de procesadores/CPU en su computadora. Por lo tanto, si tiene cuatro procesadores, tendría declaraciones como estas:BB_NUMBER_THREADS ="8" PARALLEL_MAKE ="-j 8"
Para ver la cantidad de CPU en su computadora, ejecute el siguiente comando:
lscpu
Paso 5:Proceso de compilación y construcción
Para comenzar a construir la imagen, ejecute el siguiente comando en su directorio /build.
bitbake core-image-sato
Eso comenzará a descargar y compilar paquetes para el sistema de destino. Por favor, no ejecute el comando bitbake anterior con privilegios de root, ya que generará un error. Para una compilación por primera vez, el proceso puede demorar varias horas (incluso más de 2). A veces, bitbake puede tener un error. No entrar en pánico; ejecute el comando anterior de nuevo. El error puede deberse a la caída de un sitio web en particular o a la falta de un recurso.
Las imágenes binarias resultantes se almacenan en el directorio /build en poky/build/tmp/deploy/images/qemux86.
Conclusión
Si bien Yocto puede ser bastante difícil de dominar en una sola sesión, es una gran utilidad para comenzar a crear una distribución de Linux personalizada para su proyecto. Espero que esta publicación le haya brindado un procedimiento detallado sobre cómo comenzar con todo el proceso de creación de una distribución personalizada de Linux.