He creado esta y otras guías para documentar mi experiencia instalando libreboot en diferentes equipos. Encontré buenas fuentes pero la información está dispersa (en algunos casos desfasada) y creo que puedo aportar cierta claridad al respecto. He creado esta versión sintetizada para recurrir cuando ya se tiene cierta experiencia y otra versión extendida donde explico todo con más detalle.
Básicamente existen dos formas de instalar libreboot en este equipo. Una es mediante flasheo interno (más complejo y arriesgado) y otra es mediante flasheo externo (método que aquí se explica).
Para el flasheo externo necesitamos: Otro equipo con un sistema operativo linux (ordenador portátil con Pop!_OS en mi caso), un programador flash SPI (Raspberry Pico 1, RP2040, en mi caso), una buena pinza SOIC8 (Pomona 5250 en mi caso) y 6 cables dupont de menos de 20cm y diferentes colores.
Es recomendable que el equipo que se vaya a usar tenga suficiente batería (para unos minutos) o esté conectado a una fuente de energía ininterrumpida (SAI/UPS) . Cuando escribamos el nuevo firmware en los chips no querremos que el proceso se interrumpa.
- Preparación y desmontaje del x230 -
Primero debemos verificar que la bios de fábrica de nuestro thinkpad x230 está actualizada a la última versión (pcsupport.lenovo.com/es/es/products/laptops-and-netbooks/thinkpad-x-series-laptops/thinkpad-x230/downloads/driver-list/component?name=BIOS).
Posteriormente lo que debemos hacer es desmontar el equipo para identificar los dos chips que vamos a flashear. Para ello, primero procedemos a retirar la batería y posteriormente desatornillamos los siguientes tornillos (libreboot.org/docs/install/x230_external.html).

Lo siguiente será retirar el teclado empujando levemente la parte inferior hacia adelante, teniendo cuidado con el conector al retirarlo.

Y finalmente desconectaremos el cable del panel táctil para poder levantar y retirar el reposamanos al completo.

Los chips se encuentran en la parte inferior izquierda, adheridos a una lámina protectora negra que debemos levantar.

En mi caso tuve que limpiar los chips para poder identificarlos (lo hice con bastoncillos humedecidos con alcohol) ya que quedaron partes del adhesivo cubriendo la superficie. Una vez limpios debemos apuntar el identificador de cada chip (hasta donde alcance la vista). En mi caso, el chip inferior es un MX25L6406E y el chip superior es un MX25L3206E.

Algo que creo que no es necesario pero aún así prefiero hacer, es desconectar la pila del equipo (ver dos imágenes más arriba). No quiero ningún tipo de voltaje adicional más allá del que le vamos a dar con la Raspberry Pico.
Con los chips identificados podemos hacer una búsqueda rápida por internet para verificar la distribución de los pines, la capacidad de memoria que tienen y el voltaje (que debe ser 3,3v para poder flashearlos con la Pico).
En mi caso, el chip inferior tiene una capacidad de 8MB y el superior de 4MB (esto suele ser lo habitual).
- Preparación y construcción del nuevo firmware -
En este punto dejamos a un lado el thinkpad x230 y vamos a construir las herramientas necesarias para el flasheo en el otro equipo. Estos pasos pueden servir como referencia para instalar Libreboot en otros equipos:
1 . Para instalar git y configurar un usuario local (requisito obligatorio) debemos hacer lo siguiente (si no quieres crear una cuenta de usuario real puedes usar una ficticia como se muestra):
$ sudo apt update
$ sudo apt install git
$ git config --global user.name "Johnn Doe"
$ git config --global user.email "johnndoe@example.com"
2 . Posteriormente clonamos el repositorio del desarrollador principal de libreboot y accedemos a la carpeta.
$ git clone https://codeberg.org/libreboot/lbmk
$ cd lbmk
3 . E instalamos las dependencias necesarias según nuestro sistema operativo. Puedes encontrar los archivos de configuración en/lbmk/config/dependencies para elegir el que necesites. En el caso de Pop!_OS se deben instalar las dependencias aplicables a ubuntu. Para ubuntu aparecen dos archivos de configuración, uno general y otro para la versión 2404, puedes instalar las dependencias para ambas versiones si lo crees necesario.
$ sudo ./mk dependencies ubuntu
$ sudo ./mk dependencies ubuntu2404
4 . Es el momento de construir la herramienta de flasheo:
$ ./mk -b flashprog
5 . Llegados a este punto tenemos dos opciones, compilar nosotros mismos la rom (a) o usar una rom pre-compilada (b, más rápido).
(a) El proceso de compilación tarda varios minutos (15-20 en mi caso) pero antes vamos a añadir un comando para acelerarlo.
$ export XBMK_THREADS=$(nproc)
La compilación se ejecuta como sigue:
$ ./mk -b coreboot x230_12mb
Si todo ha ido bien tendrás diferentes versiones de la rom en /lbmk/bin/x230_12mb.
(b) Para usar una imagen pre-compilada podemos acudir a mirrors.mit.edu/libreboot/stable (hay otros mirrors en libreboot.org/download.html, el del MIT es solo uno de ellos). Allí podemos encontrar todas las roms de libreboot pre-compiladas, para todos los equipos, tanto las versiones más antiguas como las más recientes. Es recomendable verificar las firmas y la integridad de la rom que vamos a usar (este es un paso que he obviado en esta guía y solo se encuentra en la versión extendida).
Para construir el firmware hay que modificar la rom pre-compilada mediante el siguiente comando:
$ ./mk inject libreboot-25.06_x230_12mb.tar.xz
Por defecto, en este proceso, se aleatoriza la dirección MAC de la tarjeta de red del equipo. Si se requiere personalizar una concreta, se debe indicar al final de la instrucción de esta manera:
$ ./mk inject libreboot-25.06_x230_12mb.tar.xz setmac 1A:2B:3C:4D:5E:6F
Una vez construido nuestro nuevo firmware solo queda extraerlo.
$ tar xvf libreboot-25.06_x230_12mb.tar.xz
Comprobamos que tenemos las diferentes versiones en la ruta /lbmk/bin/x230_12mb.
- Proceso de flasheo -
Elección y división de la rom
Antes de flashear, vamos a realizar un paso previo que es necesario para instalar libreboot en un thinkpad x230. Al tener dos chips, debemos dividir la rom en dos partes como sigue:
Primero debemos escoger que versión de la rom que hemos construido queremos instalar. Todas las versiones se encuentran localizadas en /lbmk/bin/x230_12mb. En mi caso he escogido una rom con arranque seagrub en modo gráfico y teclado español (te recomiendo investigar las distintas opciones para escoger la que mejor se adapte a tus necesidades y a los sistemas operativos que quieras usar).
Una vez escogida, situándonos dentro de /lbmk/bin/x230_12mb, ejecutamos lo siguiente.
$ dd if=seagrub_x230_12mb_libgfxinit_corebootfb_esqwerty.rom of=top.rom bs=1M skip=8
$ dd if=seagrub_x230_12mb_libgfxinit_corebootfb_esqwerty.rom of=bottom.rom bs=1M count=8
Si todo ha ido bien, ya tendremos nuestra rom dividida y lista para instalar.
Preparación de la Raspberry Pico
Como se mencionó en la primera parte de esta guía, para el flasheo externo debemos usar un programador flash SPI, que será una Raspberry Pico RP2040 en mi caso. A partir de este momento vamos a preparar el firmware para la Raspberry Pico, para posteriormente flashearla y que nos sirva de “puente”. Este proceso lleva unos minutos ya que compila el firmware para todos los dispositivos compatibles, no solo para la pico.
$ cd lbmk
$ export XBMK_THREADS=$(nproc)
$ ./mk -b pico-serprog
Ahora debemos conectar la Pico al equipo mediante el cable usb pero antes de conectarla debemos tener pulsado el pequeño botón blanco que trae. Esto hará que arranque como una unidad de almacenamiento externa y el equipo al que la conectes la detecte como tal.
En la ruta /lbmk/bin/serprog encontraremos todos los firmwares que acabamos de construir. Allí tenemos que buscar (en nuestro caso serprog_pico.uf2), seleccionar, copiar y pegar este archivo en la unidad de almacenamiento creada por la Raspberry Pico. Al hacer esto el firmware se instala automáticamente y el dispositivo dejará de funcionar como unidad de almacenamiento externa.
En este punto desconectamos la pico físicamente.
Flasheo del chip inferior
Es el momento de conectar la pinza SOIC8 a la Raspberry Pico mediante los cables dupont siguiendo el siguiente diagrama.

Vale la pena repasar varias veces el diagrama y las conexiones antes de conectar la pinza al chip. Si mandamos tensión a un pin que no debemos podríamos dañarlo.
Conectamos la pinza al chip inferior. Para ello, fijándonos muy bien, ajustamos primero un lado y luego el otro de modo que quede bien fija. Se moverá un poco si lo fuerzas pero no debe saltar.

Con mucho cuidado de no mover la pinza, conectamos la Pico al equipo mediante el cable usb. Una vez conectada, para localizar e identificar la Pico en nuestro sistema, debemos ejecutar
$ sudo dmesg
En la parte final de lo que nos muestra, debe aparecer un identificador tipo ttyACM*, donde el asterisco es un número (en mi caso ttyACM0). Debemos recordar este identificador para apuntar a él en los siguientes pasos.
Lo siguiente que vamos a hacer es utilizar la herramienta flashprog, primero para hacer una copia de seguridad de la rom instalada y posteriormente para flashear el chip.
Comenzamos con la copia de seguridad de la bios instalada (si no se concreta ninguna ruta se va a guardar por defecto en la carpeta desde donde estamos trabajando).
$ cd lbmk/elf/flashprog
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM0,spispeed=16M -r bottom1.rom
Si flahsprog no reconoce nuestro chip y ofrece varias posibilidades, debemos elegir el identificador de chip más similar al nuestro (por eso era importante apuntar el identificador de nuestro chip) y añadirlo al final de la instrucción. Por ejemplo, si nos da la opción de varios identificadores como "ejemploA", "ejemploB" o "ejemploC" y el más parecido al nuestro es "ejemploB", deberíamos añadirlo de la siguiente forma (incluye las comillas).
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM0,spispeed=16M -c "ejemploB" -r bottom1.rom
En mi caso, el mensaje reportado por flashprog se mostró de la siguiente forma:

Como mi chip inferior tiene el identificador MX25L6406E, escogeré la tercera opción y la instrucción quedará como sigue.
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM0,spispeed=16M -c "MX25L6406E/MX25L6408E" -r bottom1.rom
Una vez leído el chip y realizada la copia de seguridad, hacemos otra.
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM0,spispeed=16M -c "MX25L6406E/MX25L6408E" -r bottom2.rom
Y las comparamos
$ diff bottom1.rom bottom2.rom
(también se puede usar $ sha512sum bottom*.rom para comparar los hashes de ambos archivos y ver si coinciden).
Si no obtienes ningún resultado es indicativo de que ambas copias son iguales y todo fue correctamente. Si no es así, simplemente crea más copias y compáralas hasta que coincidan.
Llega el momento de la verdad, vamos a flashear el chip inferior e instalar la parte de la rom correspondiente que tenemos preparada (el Intel Management Enigne se encuentra instalado en este chip junto a otras funcionalidades de la bios).
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM0,spispeed=16M -c "MX25L6406E/MX25L6408E" -w ../../bin/x230_12mb/bottom.rom
Como se explicó anteriormente, en mi caso tuve que especificar el identificador del chip pero siempre puede no ser el caso. Si no fuese necesario especificarlo porque flashprog nos detectara correctamente el chip, el comando para la escritura sería más simple $ sudo ./flashprog -p serprog:dev=/dev/ttyACM0,spispeed=16M -w ../../bin/x230_12mb/bottom.rom.
Después de todo el proceso de lectura, borrado, escritura, verificación... debe aparecerte VERIFIED. Si no es así puedes intentarlo de nuevo.
Una vez terminado, desconectamos la raspberry pico del equipo y posteriormente, con cuidado, desconectamos la pinza del chip.
Flasheo del chip superior
Repetimos el mismo proceso para el chip superior.
Lo primero es conectar la pinza al chip. Fijándonos muy bien, ajustamos primero un lado y luego el otro de modo que quede bien fija. Se moverá un poco si lo fuerzas pero no debe saltar.

Volvemos a utilizar la herramienta flashprog, primero para hacer una copia de seguridad de las rom instalada y posteriormente para flashea el chip.
Estando posicionados en /lbmk/elf/flashprog escribimos lo siguiente:
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM0,spispeed=16M -r top1.rom
Al igual que me ocurrió con el chip inferior, flashprog no es capaz de reconocer el identificador exacto de este chip, mostrando el siguiente mensaje:

Como mi chip superior tiene el identificador MX25L3206E, escogeré la tercera opción y la instrucción quedará como sigue.
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM0,spispeed=16M -c "MX25L3206E/MX25L3208E" -r top1.rom
Una vez leído el chip y realizada la copia de seguridad, hacemos otra.
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM0,spispeed=16M -c "MX25L3206E/MX25L3208E" -r top2.rom
Y las comparamos.
$ diff top1.rom top2.rom
(también se puede usar $ sha512sum top*.rom para comparar los hashes de ambos archivos y ver si coinciden).
Si no obtienes ningún resultado es indicativo de que ambas copias son iguales y todo fue correctamente. Si no es así, simplemente crea más copias y compáralas hasta que coincidan.
Es hora de flashear el chip superior e instalar la parte correspondiente de la rom que tenemos preparada.
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM0,spispeed=16M -c "MX25L3206E/MX25L3208E" -w ../../bin/x230_12mb/top.rom
Como se explicó anteriormente, en mi caso tuve que especificar el identificador del chip pero siempre puede no ser el caso. Si no fuese necesario especificarlo porque flashprog nos detectara correctamente el chip, el comando para la escritura sería más simple $ sudo ./flashprog -p serprog:dev=/dev/ttyACM0,spispeed=16M -w ../../bin/x230_12mb/top.rom.
Después de todo el proceso de lectura, borrado, escritura, verificación... debe aparecerte VERIFIED. Si no es así puedes intentarlo de nuevo.
Una vez terminado, desconectamos la Raspberry Pico del equipo y posteriormente, con cuidado, desconectamos la pinza del chip.
Es hora de volver a montar el equipo (es importante no olvidar conectar la pila). Cuando iniciemos, el equipo arrancará con la nueva bios y el trabajo habrá terminado.

- Upgrade y Referencias -
Upgrade Lenovo Thinkpad X230
Con Libreboot instalado, a este equipo se le pueden instalar algunos componentes que, al no estar en la lista blanca de la bios propietaria, no eran compatibles. Por ejemplo, algunas tarjetas wlan de la marca atheros pasan a ser compatibles.
Referencias
libreboot.org/docs/install/spi.html
blog.yuuta.moe/2025/09/29/x230-libreboot
p2502.net/posts/libreboot-x230
www.youtube.com/watch?v=V9-zq4AgsvA
estudiobitcoin.com/flash-it-mejorando-la-seguridad-de-nuestro-setup-con-el-coreboot-de-skulls
#libreboot #linux #seagrub #seabios #flashprog #spyware #me_cleaner #thinkpad #x230 #tutorial #freesoftware #bitcoinnode
