Odroid U3: Último kernel (4.12, 4.14, 4.15) y último u-boot (2017-05)

Actualización 23/09/2017: La guía funciona también para el kernel 4.14, podéis actualizar el kernel del 4.12 al 4.14 siguiendo únicamente los pasos del punto ‘Descarga y compilación del kernel’.

Actualización 2/12/2017: La guía funciona también para el kernel 4.15.

En esta entrada le vamos a dar un buen meneo a la vieja Odroid U3 que tan bien está funcionando durante los últimos años. Hace tiempo que se quedó sin soporte por parte del fabricante y seguía con un kernel bastante antiguo de la serie 3.8.

En los últimos kernels, el chipset Sansung Exynos 4412, que es el corazón de nuestro Odroid U3 ya está definitivamente incorporado a la rama estable. Para hacer esta actualización vamos a necesitar los siguientes ingredientes:

  1. Conversor serie a USB: para actualizar el kernel, primero hay que actualizar el gestor de arranque u-boot, y para ello hay que hacer uso de la consola serie que trae nuestra Odroid.
  2. Una tarjeta micro USB: si algo no va bien durante el proceso de actualización, haremos uso de una imagen de recuperación (un recovery de emergencia), que nos restaurará el u-boot, de forma que podamos arrancar la placa como si no hubiera pasado nada. Yo usaré una de 1Gb.
  3. El adaptador eMMC a microSD, y un adaptador microSD a USB: Antes de empezar a hacer nada, haremos una imagen de la tarjeta eMMC por si algo va mal.

Los que hayáis leído mis entradas anteriores, sabréis que tengo una tarjeta eMMC para el sistema operativo, y una tarjeta micro USB para la partición /var y algún otro dato variable. Así que este será nuestro escenario inicial, una Odroid U3 con eMMC de 8Gb y micro SD de 32Gb.

 

Empezamos: la copia de seguridad y el recovery

Siempre, siempre, siempre hay que hacer una copia antes de empezar a trastear nada, y más si se trata del kernel y el gestor de arranque. Y lo dice alguien que es un temerario en este tipo de cosas: haced una copia antes de nada.

 

Bastará con quitar la tarjeta eMMC de la Odroid, conectarla al adaptador y ejecutar el siguiente comando:

En mi caso, el lector de tarjetas es el dispositivo /dev/sdd. Al cambo de unos minutos tendréis la copia lista. De la tarjeta microSD hacemos copia de la misma forma:

Ya tenemos las copias hechas. Ahora grabaremos la imagen del recovery en una tarjeta microSD. Este paso no es estrictamente necesario, pero si algo va mal en el proceso (a mi me ha pasado), será nuestra tabla de salvación ya que nos permitirá restaurar el u-boot original y volver a arrancar el sistema. Ponemos la tarjeta de 1Gb en el adaptador USB y continuamos (este procedimiento, está descrito en la wiki oficial):

Hecho hecho ya podemos guardar bien esta tarjeta por si hay que hacer uso de ella (al final de la entrada explicaré como usarla, si llega el caso).

 

Descarga y compilación del kernel

Ahora nos vamos a descargar el ultimo kernel disponible, y lo vamos a compilar para nuestra Odroid U3:

NOTA: 03/06/2017, he añadido la última linea en el listado anterior, que se me había olvidado… 🙁

El archivo .config es el de este blog, http://rglinuxtech.com/?p=1656, os lo aconsejo, es muy muy interesante. Si lo que queréis es la configuración estándar podéis ejecutar el comando make exynos_defconfig, en lugar de bajar el de esa web.

Ahora editamos el archivo /boot/boot.txt que debe quedar más o menos así:

¡ATENCIÓN!: La linea del bootcmd donde le decimos la imagen uInitrd-4.12.0-rc4-next-20170609 a vosotros os cambiará, dependiendo de la versión del kernel que compiléis. Si no la cambiáis por la que os corresponda, ¡no os arrancará el sistema! (la podéis ver haciendo un ls /boot).

Después de editar el archivo boot.txt, lo guardáis y generáis el boot.scr con los siguientes comandos:

 

Descarga y compilación de u-boot

Para compilar e instalar la última versión de u-boot vamos a necesitar su código fuente, así como unos binarios de Hardkernel/Samsung que nos permitirán arrancar con el secure boot (suena más complicado de lo que es). Además para instalar el u-boot, necesitaremos el módulo serie-USB y otro equipo, para cargarle los archivos usando la funcionalidad fastboot (también suena más complicado de lo que es). Vamos a ello.

Parte 1, en la Odroid:

 

Ya tenemos el u-boot compilado, y todos los archivos necesarios en la ruta actual:

Tenemos que pasarnos los archivos .bin al otro equipo, para poder cargarlos vía fastboot (los podemos pasar por SSH, con un pincho USB, o como nos venga mejor (yo uso SSH con el Midnight Commander)). Antes de continuar conectamos vía conversor serie-usb, la Odroid U3 al otro equipo (en mi caso un portátil), y también vía puerto micro USB como veis en la foto:

Resumiendo: tenemos nuestra Odroid U3, conectada al portátil con el conversor y con el cable USB. Tenemos el kernel instalado en la Odroid U3 en /boot, y los archivos del u-boot en el portátil.

Parte 2, en el otro equipo:

Antes de nada, necesitamos instalar las utilidades para subir los archivos a la Odroid a través de fastboot:

Ahora viene el paso más aparatoso: abrimos un terminal en el portátil para conectar vía serie a la Odroid U3. Personalmente me gusta el programa picocom para estas cosas:

 

Cuando nos aparece el mensaje ‘Terminal ready‘ pulsamos varias veces el la tecla ‘Intro‘ y vemos aparecer la linea de comandos (cuando conectamos vía serie no hace falta meter el usuarios y la contraseña…). Podemos ejecutar el comando uname -a para comprobar lo viejo que es el kernel que estamos usando 🙂

Ahora hay que ser rápido, muy rápido diría yo… Vamos a reiniciar la Odroid y cuando vemos el mensaje para detener la carga del u-boot (Hit any key to stop autoboot), hay que pulsar ‘Intro‘ para que no continue y podamos entrar en el modo fastboot. Solo espera 1 segundo, hay que estar atento (de todas formas si se nos pasa el mensaje, quitamos y ponemos la corriente de la Odroid y repetimos…):

Ya estamos dentro del u-boot, ejecutamos el comando version y veremos cual es la versión que estamos usando:

Ahora le instalaremos la última que acabamos de compilar (2017-05), para ello entramos en el modo fastboot, con el comando fastboot, y la Odroid U3 quedará a la espera de que le subamos los archivos desde la otra terminal en el portátil:

Y desde la terminal del portátil donde tenemos la los 4 archivos .bin que habíamos copiado:

 

En la consola serie de la Odroid podemos ir viendo que todo va bien:

Justo en este momento nuestra Odroid U3 se reiniciará, y nuestro nuevo gestor de arranque u-boot, nos cargará el nuevo kernel que habíamos compilado e instalado:

Y finalmente:

Ouhhh yeahhh!!! 🙂

 

Si algo va mal: uso del recovery

El sistema automático que nos restaura el antiguo u-boot tiene un funcionamiento muy curioso (al menos para mi):

  1. Quitamos la tarjeta eMMC
  2. Quitamos el cable microUSB
  3. Arrancamos la Odroid U3 con la tarjeta microSD del recovery (solo con ella).
  4. Cuando el led azul parpadee, conectamos la tarjeta eMMC (sí, en caliente).
  5. Conectamos el cable micro USB al portátil (conectando el cable le decimos al software del recovery que ya puede comenzar la recuperación, es como si apretáramos un interruptor…)
  6. Cuando el proceso ha terminado (unos 10 segundos), se apagará la Odroid U3.
  7. Colocamos la tarjeta microSD que teníamos originalmente, y reiniciamos la Odroid quitándole la corriente y volviéndosela a colocar.

La verdad es que es un sistema curioso, pero que funciona. El proceso esta documentado en el foro de Hardkernel, concretamente en esta entrada.

 

Reconocimientos

Esta vez, y por el trabajo increíble de recopilación y pruebas que ha hecho, no tengo mas remedio que reconocer el trabajo de Nico Maas, que en esta entrada de su blog ha recopilado toda la información necesaria para realizar el upgrade del u-boot y del kernel. Si leéis su entrada veréis que no coincide exactamente con la mía, ya que cada sistema es un mundo, incluso aunque la placa sea la misma. En su entrada tenéis, como ampliación, como compilar e instalar el módulo que hace que el ventilador de la Odroid U3 funcione (no lo voy a copiar aquí). ¡Muchísimas gracias Nico Maas por compartir tu experiencia!

 

2 Comments

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *