Cómo crear tu propia distribución de Linux usando Yocto
Linux se ha convertido en una utilidad confiable para crear sistemas operativos para sistemas embebidos. Sin embargo, la curva de aprendizaje para las utilidades de desarrollo integradas puede ser bastante desafiante. Muchas personas que utilizan estas complejas herramientas han dedicado mucho tiempo a comprenderlas y dominarlas, y Yocto no es diferente. Con él, puede desarrollar una distribución de 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 construcción.
El resultado de la construcción del Proyecto Yocto consta de tres componentes principales:
- Binarios de tiempo de ejecución de destino: Contiene todos los archivos auxiliares necesarios para implementar Linux en el sistema de destino. Otros archivos incluyen el cargador de arranque, el núcleo, los módulos del núcleo, la imagen del sistema de archivos raíz.
- Alimentación 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 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 utilizaban 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 distribuciones existentes planteaba varios desafíos.
Una es que todo el proceso de desmontaje de paquetes no fue fácil. La eliminación de algunos paquetes podría romper las dependencias mantenidas por otros paquetes que podrían resultarle útiles. Además, algunos paquetes se integraron con el proceso de arranque y ejecución, haciendo que su eliminación sea tediosa.
Por lo tanto, la distribución existente a menudo conducía a retrasos innecesarios o a tener un sistema que no cumplía con todos los estándares requeridos.
Empecemos.
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 alto, mejor)
- Último sistema operativo Ubuntu (20.04 LTS) o cualquier otro sistema operativo Linux:
- Fedora
- openSUSE
- CentOS
- Debian
- Mínimo de 100 GB de espacio libre en el disco duro (un tamaño mayor garantizará un mejor rendimiento). Yocto puede requerir muchos recursos, dependiendo de su producto final objetivo.
Si es un usuario de macOS o Windows, utilice 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: configura el host
Primero instalemos las dependencias requeridas en nuestro sistema anfitrión. 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 del sitio web del Proyecto Yocto. Ejecute el comando a continuación, 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 recibe 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, necesitamos inicializar el 'entorno de compilación'. Ejecute los siguientes comandos. 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 que se complete la inicialización, tendremos un directorio de compilación y un archivo de configuración. El directorio de compilación es donde ocurre toda la compilación del sistema y aloja los archivos de imágenes una vez finalizado el proceso. En realidad, después de la inicialización, la Terminal apuntará automáticamente a la carpeta de compilación. Puedes ver eso en la imagen de arriba.
Paso 5: configurar
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, queremos decir -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 procesadores / CPU en su computadora. Por lo tanto, si tiene cuatro procesadores, tendrá 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. Por primera vez, el proceso puede tardar varias horas (incluso más de 2). A veces, bitbake puede generar un error. Que no cunda el pánico; ejecute el comando anterior nuevamente. El error puede deberse a que un sitio web en particular no funciona o que falta 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 de una sola vez, 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 de Linux personalizada.
Deja una respuesta