Arranque Múltiple en ODROID-N2: Añadiendo la Posibilidad de Seleccionar Múltiples Sistemas Operativos desde un Unico Disco

El ODROID-N2 es un ordenador de placa reducida (SBC) fabricado por Hardkernel, que fue lanzado en febrero de 2019 y que funciona con un S922X de Amlogic (4xA73@1.8GHz y 2xA53@1.9GHz). Una de las nuevas características del ODROID-N2 es una memoria flash SPI de 8 MB. Obviamente, la memoria flash SPI integrada no es una tecnología nueva y algunos SBC ya la tienen para usarse en ciertos propósitos. Normalmente, la memoria flash SPI tiene un gestor de arranque que permite cargar la imagen del sistema operativo desde un almacenamiento más grande como es un almacenamiento USB o uSD

La memoria flash SPI en el ODROID-N2 puede ser de arranque y 8 MB es un espacio bastante grande para un gestor de arranque que generalmente ocupa menos de 1 MB. Por otro lado, es muy pequeña para la imagen del kernel de Linux, que suele ser de 8 ~ 9 MB para una imagen comprimida de ODROID-N2. Nuestro objetivo es mejorar el uso de este pequeño almacenamiento en lugar de simplemente instalar un gestor de arranque.

Ha habido mucha demanda para administrar múltiples sistemas operativos y muchos usuarios de SBC han intentado ejecutar múltiples sistemas operativos instalados en el almacenamiento USB, uSD y eMMC y, como tal, se proporcionaron instrucciones con un script o comandos de Linux. Muchos usuarios lo lograron, pero las instrucciones no son fáciles para los usuarios que no están familiarizados con un sistema Linux. Queremos ayudar a esos nuevos usuarios que desean utilizar dos sistemas operativos pero que tienen problemas para configurar múltiples entornos de sistemas operativos.

Por estas dos razones, mi compañero de trabajo Joy y yo empezamos a estudiar Petitboot, que es un gestor de arranque de sistema operativo basado en Linux kexec. Tuvimos que esforzarnos bastante para compilar una imagen completa que se ajustara a los 8MB, en concreto, tuvimos que personalizar el kernel de Linux para reducirlo a un tamaño más pequeño de unos 3.8MB, que es más de la mitad del tamaño del kernel de Linux genérico. Al mismo tiempo, puesto que Petitboot es una aplicación que se ejecuta en el espacio de usuario de Linux, tuvimos que compilar un pequeño sistema de archivos raíz que se ajustara a los 3.2MB. De lo contrario, no podríamos instalar el pequeño sistema Linux en 8MB. Aquí tienes el mapa de memoria de la imagen para arrancar Petitboot en 8MB.

Figura 01: Mapa de memoria de la imagen para iniciar Petitboot en 8 MB.

Después de salvar varios obstáculos, hemos logrado compilar con éxito el pequeño sistema Linux de arranque que incluye U-boot en 8 MB y de esta forma ODROID-N2 pueda ejecutar Petitboot desde la memoria flash SPI. Aunque la primera versión únicamente mostraba los menús de Petitboot y la entrada de inicio configurados manualmente para un sistema operativo ya que había formatos de inicio como Grub o PXE que no eran compatibles con el ODROID-N2.

Figura 03 - menu petitboot

Como mi intención era ayudar a los usuarios a iniciar un sistema operativo sin tener que configurar prácticamente nada, tuve que añadir un componente que pudiera reconocer la imagen del sistema operativo aportada por la comunidad de código abierto. Todas las imágenes del sistema operativo para SBCs ODROID tienen un script de arranque especial boot.ini que contiene los comandos del gestor de arranque para configurar los parámetros del kernel, qué kernel debe cargarse, etc. De lo contrario, el usuario tendría que aprender el nuevo formato de configuración de arranque para Petitboot y asignar los archivos de arranque manualmente.

He escrito un código que analizar el archivo boot.ini y pude hacer que Petitboot lea la imagen del sistema operativo del almacenamiento conectado al ODROID-N2 y se muestre en pantalla para que el usuario pueda seleccionar la correspondiente entrada de arranque usando un Teclado USB conectado o un control remoto IR. Creo que éste es un gran logro y permite al usuario seleccionar fácilmente un sistema operativo instalado y conectado al ODROID-N2.

He administrado la versión de Petitboot para ODROID-N2 durante el mes de junio de 2019 y, finalmente, pude corregir los errores más importantes y mejoré algunas funciones que normalmente lleva a cabo U-boot para arrancar un sistema operativo. Aun así, no es una solución perfecta. Como no puedo ocuparme completamente de esta tarea de Petitboot, el Petitboot actual no funciona tan bien como esperaba y soñaba, pero de vez en cuando lo mejoraré y lo pondré a disposición de cualquiera.

Figura 03 - Menu Petitboot

Figura 04 - Menu Petitboot

La versión actual puede hacer lo siguiente:

  • Reconocer las diferentes imágenes del sistema operativo de la comunidad de código abierto tal como son, lo que significa que perfectamente puede iniciar la imagen del sistema operativo tal como se inicia desde la ranura eMMC o uSD sin ningún cambio. Descubrí que Armbian ha cambiado la estructura de su sistema de archivos, por lo que es necesario realizar algunos cambios.
  • Se puede arrancar fácilmente desde un almacenamiento USB. Muchos SoC para SBC no permiten arrancar desde un almacenamiento USB que no sea uSD o eMMC. ODROID-N2 es capaz de arrancar desde USB seleccionando fácilmente la entrada de arranque del almacenamiento USB en lugar de utilizar una línea de comando.
  • El orden del dispositivo de arranque se puede configurar desde el menú, puedes elegir uSD como medio de arranque prioritario o el USB.
  • Arranque automáticamente para los soportes de arranque de alta prioridad en la segunda unidad.

La versión actual tiene algunas limitaciones:

  • La configuración de arranque debe almacenarse en uSD, lo cual es incómodo. Esto se debe a la limitación de la función SoC, aunque esto estudiando una solución alternativa.
  • Todavía es un proyecto WIP y tiene algunos problemas para trabajar con el arranque heredado desde uSD o eMMC. Debido a que parte del trabajo que se realizó en U-boot se está moviendo a Petitboot y no todas las funciones se mueven o no son compatibles.
  • El arranque desde soportes de red como PXE no es compatible, aunque lo he incluido en mi lista que cosas pendientes por implementar
  • Al no ofrecer UX sofisticado debido a la pequeña capacidad de la memoria flash SPI, 8MB es el margen para almacenar los BLOB obligatorios, únicamente.

Me alegró ver que muchos usuarios están intentando usar Petitboot en su ODROID-N2 y muchos de ellos están contentos porque pueden iniciar un sistema operativo con un propósito diferente. Mantengo un hilo en el foro ODROID en https://forum.odroid.com/viewtopic.php?f=182&t=33873, y seguiré actualizando la versión cada vez que haga correcciones y/o mejoras. Para comentarios, preguntas y sugerencias, visite el artículo original en https://medium.com/@tobetter/multiple-os-on-odroid-n2-3a5f3a14a726.

Be the first to comment

Leave a Reply