La BIOS/UEFI libre: Libreboot

El primer software que corre en un equipo no es el sistema operativo, sino la BIOS (o más recientemente su reemplazo la UEFI). Este software es el encargado de inicializar algunos componentes hardware y lanzar el sistema operativo. Pero este software preinstalado en nuestros equipos no es libre y como cualquier software no libre corriendo en una maquina puede contener errores, puertas traseras, o sencillamente ser ineficiente.

Existen algunas alternativas libres para reemplazar las BIOS/UEFI de nuestros equipos. En esta entrada voy a hablar sobre Libreboot, una alternativa de código abierto con capacidades avanzadas de seguridad, rápida y fiable.

Lamentablemente no podemos usar Libreboot en cualquier máquina, ya que solo es compatible con algunos modelos:

  • Servidores: Asus KFSN4-DRE and Asus KGPE-D16
  • Desktop: Asus KCMA-D8, Intel D510MO, Gigabyte GA-G41M-ES2L, and Apple iMac 5,2
  • Laptops: Asus Chromebook C201, Lenovo ThinkPad X60, X60s and X60 Tablet, Lenovo ThinkPad T60 (models with ATI GPUs cannot be used due to proprietary vBIOS), Lenovo ThinkPad X200, X200s (some exceptions) and X200 Tablet, Lenovo ThinkPad R400, Lenovo ThinkPad T400 and T400s, Lenovo ThinkPad T500, Apple MacBook 1.1, and Apple MacBook 2.1

En este caso vamos a instalarla en un Lenobo X200. Este es uno de los pocos modelos certificados por la FSF como "FSF-certified to Respect Your Freedom" (ver Respects Your Freedom hardware product certification). Para conseguir esta certificación en este equipo, se realizan las modificaciones que se detallan a continuación. 

Lo primero que haremos es una copia de seguridad del contenido de nuestra BIOS actual, que luego sobreescribiremos con Libreboot. Para hacer este proceso es necesario desmontar el equipo y localizar el chip que contienen la BIOS. Utilizando un programador (en mi caso uso una Raspberry Pi 3 B) lo conectamos al chip y hacemos una copia de seguridad del chip y luego escribimos la BIOS nueva.

Preparación de Raspberry Pi

Primero preparamos nuestra Raspberry Pi, yo tengo instalado el sistema operativo Raspbian que podéis descargar aquí. Una vez descargado lo pasamos a la tarjeta SD de nuestra Pi, en la web de Raspberry recomiendan usar Etcher

Arrancamos nuestra Pi con Raspbian, usuario por defecto Pi con password raspberry. Si tenemos conectada la red y tenemos DHCP nos asigna IP y podemos instalar los paquetes que necesitamos. Primero actulizamos: 

sudo apt update
sudo apt upgrade

Instalamos los paquetes que necesitamos (vim para editar ficheros, ssh para conectar desde otro equipo para pasar las rom y flashrom para leer y escribir el chip):

sudo apt install vim openssh-server flashrom

Activamos el servicio ssh:

sudo systemctl enable ssh 
sudo systemctl start ssh

Verificamos que tenemos habilitado el interface spi, descomentando la línea dtparam=spi=on en config.txt:

sudo vim /boot/config.txt

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
dtparam=spi=on

y ya tenemos preparada nuestra Raspberry para flashear BIOS, ahora vamos a conectar los cables.

Desmontar el x200 conectar los cables y copia de la BIOS actual

Trabajar siempre en el equipo con la batería quitada. Comprobar bien la colocación de los cables según los esquemas que se muestran. Recordar que los cables llevan voltaje y una mala colocación puede tostar el chip

 

Parece ser que podemos encontrarlos 2 modelos de chip en los equipos x200, el SOIC-8 y el SOIC-16, fácilmente identificables porque el primero tiene 8 patillas y el segundo 16.  En los x200 que yo he visto siempre he encontrado el modelo SOIC-16, que es el que voy a detallar.

Esta es la localización del chip:

x200  SOIC16

El esquema de colocación de los cables:

Raspberry Pi - SOIC16

Copiamos la BIOS actual dos o tres veces y comparamos los ficheros para asegurarnos de que tenemos una copia correcta: 

mkdir x200
cd x200
flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 --chip MX25L6405D -r romread1.rom
flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 --chip MX25L6405D -r romread2.rom
sha512sum romread*.rom

Copiamos los ficheros romread1.rom y romread2.rom fuera de nuestra Raspberry Pi y los guardamos en lugar seguro como copia de nuestra BIOS original.

Preparamos Libreboot para instalar

Hay varias maneras de preparar Libreboot, la más sencilla es usar las versiones ya compiladas que distribuyen en Libreboot, a la que tan solo tenemos que añadirle la MAC de nuestro equipo. 

Primero anotamos la MAC de nuestro equipo. Normalmente viene impresa detrás del portátil. Si no viniera tendríamos que arrancar desde un usb por ejemplo y ver la MAC.

Teniendo la MAC anotada vamos a descargar la rom correspondiente a nuestro x200. En la web de libreboot o en uno de sus mirror descargamos la última versión, a la hora de escribir este artículo podemos encontrarla aquí, aunque conviene mirar si existe una más nueva.

Sabiendo el modelo de chip que tenemos (que vimos al desmontar el equipo) descargamos el fichero correspondiente, en mi caso el libreboot_r20160907_grub_x200_8mb.tar.xz.

Al descomprimir el archivo tenemos los rom correspondientes a los equipos x200 para diferentes configuraciones de idioma, usamos la x200_8mb_esqwerty_vesafb.rom.

Ahora tenemos que poner en esta rom la MAC de nuestro equipo, para lo que usaremos ICH9 gen utility. Descargamos las utilidades de libreboot, donde se encuentra ich9gen: libreboot_r20160907_util.tar.xz.

Descomprimimos el fichero:

tar xf libreboot_r20160907_util.tar.xz

Ejecutamos ich9gen con nuestra MAC (en lugar de las XX):

cd libreboot_r20160907_util/ich9deblob/x86_64/ 
./ich9gen --macaddress XX:XX:XX:XX:XX:XX

Nos genera unos cuantos ficheros, pero el que nos interesa para nuestro chip SOIC-8 es ich9fdgbe_8m.bin. Vamos a insertar este fichero con el descriptor+gbe a nuestra imagen ROM. Copiamos el rom que descargamos antes x200_8mb_esqwerty_vesafb.rom en esta carpeta como libreboot.rom e insertamos nuestro descriptor+gbe:

cp ~/Descargas/x200_8mb_esqwerty_vesafb.rom ./libreboot.rom  
dd if=ich9fdgbe_8m.bin of=libreboot.rom bs=12k count=1 conv=notrunc

y ya tenemos en libreboot.rom nuestro libreboot listo para instalar en el x200. Copiamos el fichero a nuestra Raspberry Pi:

scp libreboot.rom 192.168.1.104:/home/pi/x200

Solo nos falta escribir la nueva rom.

Escribir la imagen rom de libreboot en el x200

Desde la raspberry pi, con los cables conectados igual que cuando copiamos la BIOS, vamos a escribir la nueva imagen rom que hemos creado:

cd x200 
flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=256 --chip MX25L6405D -w libreboot.rom

Si todo va bien, ya tendremos nuestro equipo preparado con la BIOS Libreboot instalada. Montamos la tapa y el teclado y conectamos la batería (podemos probar antes de poner los tornillos si todo va bien). Al encender el equipo tenemos que ver algo similar a la foto de portada de este artículo.

Cambio de la tarjeta WiFi

Por defecto los x200 vienen normalmente con una tarjeta wifi Intel con drivers propietarios. Si nos hemos tomado la molestia de cambiar nuestra BIOS por una de código abierto no podemos dejar esa tarjeta en nuestro equipo. Cambiar la tarjeta por una Atheros AR5B95 es muy fácil, y este modelo es muy fácil de conseguir en Internet por muy poco.

Enhorabuena, su equipo ahora ya es un poco más libre!!!

Modificado por última vez enMiércoles, 29 Abril 2020 20:51
(0 votos)
Etiquetado como :

Deja un comentario

Asegúrese de introducir toda la información requerida, indicada por un asterisco (*). No se permite código HTML.