Coreboot en x230
Coreboot en x230

La BIOS/UEFI libre: Coreboot

En una entrada anterior vimos como podíamos instalar Libreboot, concretamente en un Lenovo x200, reemplazando la BIOS propietaria por una open source. El problema es que Libreboot solo puede instalarse en un reducido número de máquinas y si queremos instalar una BIOS libre en una máquina más potente que las disponibles para Libreboot tenemos que recurrir a otro proyecto: Coreboot.

Coreboot es un proyecto destinado a reemplazar la BIOS propietaria por una libre, ligera y diseñada para realizar solamente el mínimo de tareas: iniciar el hardware y cargar un payload. Este payload puede ser cualquier programa, es decir, además de los cargadores de arranque estándar como GRUB que pueden iniciar el sistema operativo, es posible indicar a coreboot que ejecute directamente el kernel del sistema operativo en sí, lo que significa que es posible poner coreboot y el kernel de Linux en el arranque flash.

Vamos a ver como instalar Coreboot en un Lenobo x230 desde los fuentes, limpiando al tiempo lo máximo posible el Intel-ME.

Para extraer y grabar la BIOS vamos a usar una RaspBerry Pi con Raspbian (ver Preparación de Raspberry Pi en La BIOS/UEFI libre: Libreboot)

Desmontar el x230 y backup 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

Antes de empezar es recomendable actualizar la BIOS a la última versión del fabricante. Podemos descargar de la web de Leonovo una ISO para hacer un CD botable con la que es muy fácil actualizar la BIOS. Después de instalar Coreboot no podremos actualizarla a no ser que restauremos la BIOS original (de cualquier forma no es probable que saquen ninguna actualización más).

Desmontamos el equipo:

La BIOS la localizamos en estos dos chips, el de arriba es la BIOS y el de abajo es donde se encuentra el Intel-ME:

x230 chip de BIOS

Tenemos que hacer copia de estos dos chip de forma individual. Primero copiamos el de arriba. Colocando los cables en el chip SOIC-8 y en GPIO de la RaspBerrry según el esquema (la colocación de los cables es igual en ambos chip):

Raspberry Pi-GPIO - chipSOIC8

Desde la Raspberry Pi realizamos la copia:

mkdir x230
cd x230
flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=256 -c "MX25L3206E/MX25L3208E" -r top0.rom
flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=256 -c "MX25L3206E/MX25L3208E" -r top1.rom
flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=256 -c "MX25L3206E/MX25L3208E" -r top2.rom
sha512sum top*.rom

Si la salida de sha512sum es igual es que tenemos 3 copias correctas de nuestro chip. Ahora toca el chip de abajo. Yo por prudencia apago la RaspBerry para cambiar los cables. Conectamos los cables de la Raspberry al chip de abajo y copiamos su contenido:

cd x230
flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=256 -c "MX25L6406E/MX25L6408E" -r bottom0.rom
flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=256 -c "MX25L6406E/MX25L6408E" -r bottom1.rom
flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=256 -c "MX25L6406E/MX25L6408E" -r bottom2.rom
sha512sum botton*.rom

Si la salida de sha512sum es igual para todas las copias ya tenemos nuestra copia correcta de los dos chip. Podemos juntar los dos en un solo fichero:

cat bottom1.rom top1.rom > completeX230.rom

Tenemos que poner esta copia en lugar seguro. La copiamos por ssh desde nuestro equipo (lo siguiente lo ejecutamos desde un PC, la IP 192.168.1.104 es la de la Raspberry):

scp -r Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:/home/pi/x230 ./

Limpieza de la Intel Management Engine

Vamos a utilizar una herramienta llamada me_cleaner para inutilizar el ME de nuestro chip. Recordemos que este código se encuentra en el chip de abajo que grabamos como botton1.rom (también en bottom0.rom y bottom2.rom, cualquiera de ellos vale).

Descargamos me_clearner del repositorio git y ejecutamos el comando contra la rom:

git clone https://github.com/corna/me_cleaner.git
cd me_cleaner
./me_cleaner.py -S -O bottom_meclean.rom ../x230/botton1.rom

Descargamos también coreboot del que vamos a usar ahora una herramienta y posteriormente usaremos para generar la BIOS para nuestro x230:

git clone https://review.coreboot.org/coreboot
cd coreboot
git submodule update --init --checkout
cd util/ifdtool
make
./ifdtool -u ../../../me_cleaner/bottom_meclean.rom

Esto nos crea una nueva imagen con la IFD desbloqueada como: bottom_meclean.rom.new

Para compilar tenemos que tener instaladas las herramientas y librerías necesarias. Si no las tenemos el make anterior fallará. En debian/ubuntu Podemos instalar las librerías que necesitamos con apt:

sudo apt-get install build-essential bison curl flex git gnat-5 libncurses5-dev m4 zlib1g-dev

Podemos copiar ya la rom limpia a la Raspberry en la que habíamos dejado con los cables conectados al chip de abajo y flashear desde ésta la rom limpia:

scp bottom_meclean.rom.new Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:/home/pi/x230

y desde la Raspberry escribimos la rom en el chip:

flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=256 -c "MX25L6406E/MX25L6408E" -w bottom_meclean.rom.new

Ya tenemos la ME deshabilitada, vamos ahora a preparar Coreboot.

Extraer la VGA-blob de vídeo

Lo primero vamos a extraer todos los blobs de la rom: bios.bin, descriptor.bin, me.bin y gbe.bin. De estos vamos a necesitar el primero bios.bin para extraer la VGA-blob de vídeo que usaremos en nuestra nueva BIOS.

Para extraer los blobs usamos ich_descriptors_tool que encontramos en el proyecto flashrom:

git clone https://github.com/jhcloos/flashrom
cd flashrom/util/ich_descriptors_tool
make
cd ~/x230
../flashrom/util/ich_descriptors_tool/ich_descriptors_tool -f completeX230.rom -d

El resultado es 4 archivos: completeX230.rom.BIOS.bin, completeX230.rom.Descriptor.bin, completeX230.rom.GbE.bin y completeX230.rom.ME.bin

Vamos a extraer la VGA-blob con UEFITool (para compilarlo es necesario qmake):

git clone https://github.com/LongSoft/UEFITool
cd UEFITool
./unixbuild.sh
./UEFITool

Abrimos completeX230.rom.BIOS.bin. En las opciones de búsqueda (File/Search...) vamos a la pestaña Text y desactivamos Unicode. Buscamos VGA Compatible BIOS:

UEFITool - Buscar VGA

En la ventana de Messages aparece los resultados de la búsqueda, hacemos doble click encima.

Nos aparece en la ventana Structure la línea resaltada que necesitamos (Raw section). Botón derecho encima y seleccionamos Extract body...:

UEFITool - Extract body

Grabamos con el nombre: vbios.bin

Construir Coreboot

Ya hemos descargado en el paso anterior Coreboot (para usar ifdtool). Vamos entonces a la carpeta de la descarga y procedemos a construir el coreboot toolchain:

cd coreboot
make crossgcc-i386 CPUS=$(nproc)
make crossgcc-x64 CPUS=$(nproc)

Copiamos el archivo vbios.bin que obtuvimos con UEFITool a la carpeta coreboot:

cp vbios.bin /coreboot  

y configuramos las opciones para construir coreboot:

make nconfig

Tenemos que indicarle la placa y modelo del equipo en el que vamos a usar coreboot (ThinkPad X230), que queremos usar el fichero vbios.rom, verificar que está activado PS/2 keyboard init y el paiload usaremos SeaBIOS:

Al salir de make nconfig se graban los cambios y ejecutamos make:

make

Lo que nos tiene que dar nuestra BIOS coreboot.rom en el directorio build:

david@uIbch:~/coreboot$ ls -lh build/coreboot.rom  
-rw-rw-r-- 1 david david 4,0M ago 4 17:34 build/coreboot.rom

Copiamos el archivo resultante a nuestra Raspberry para escribir la BIOS:

scp coreboot.rom Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:/home/pi/x230

y desde la Raspberry, cambiamos los cables al chip de arriba y escribimos la rom en el chip:

flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=256 -c "MX25L3206E/MX25L3208E" -w coreboot.rom

Si todo a ido bien, ya tenemos la ME deshabilitada y Coreboot en nuestra BIOS. 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 nos aparece SeaBIOS y un mensaje nos indica que pulsando ESC podemos acceder a las opciones de arranque.

Cambio de la tarjeta WiFi

Por defecto los x230, al igual que sucede con los x200 vienen normalmente con una tarjeta wifi Intel con drivers propietarios:

Tarjeta Wifi Intel

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 sencillo de conseguir en Internet por muy poco.

Para comprobar que tenemos Intel ME deshabilitado podemos ejecutar en el x230 una aplicación que se incluye en coreboot. La copiamos a nuestro portátil o la descargamos y compilamos directamente en él:

git clone https://review.coreboot.org/coreboot
cd coreboot/util/intelmetool
make
./intelmetool -s

Este modelo con un disco sólido y 8 o 16 GB de RAM tiene un buen rendimiento, a sí que solo nos queda instalar un sistema libre y a darle uso.

Modificado por última vez enViernes, 14 Agosto 2020 19:50
(2 votos)
Etiquetado como :

Más en esta categoría:

La BIOS/UEFI libre: Libreboot »

Deja un comentario

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