The X230 is one of the most popular “newer” thinkpads. The machine is most well known in the “free bios” community for being the favourite of the heads community. I’ll eventually do a guide on adding the classic keyboard to this machine; but for now it’s just this guide.
This guide will also show the basics for how to get osboot running on any newer thinkpad, including the ’20 series. I try to document the disassembly for each board to the official docs. Newer thinkpads all have pretty straightforward disassembly compared to GM45 though. If you get stuck locating your chips then you can refer to the official docs for your board if there are any. If there are no docs for your specific board it might still be supported. See the hardware compatibility list.
Osboot is a little different than libreboot in that it has a different -and in my opinion better- policy on binary blobs That policy means that osboot can actually support quite a few more boards than libreboot. The downside of flashing osboot is that it reqires a bit more upfront work, since there are no precompiled binaries available. It’s not a huge deal, but it means that the process requires a basic understanding of coreboot. The coreboot build system is totally abstracted from the user with libreboot on a GM45 board.
Don’t fret though. I’ll explain in thorough detail how to get all of the necessary blobs and flash your fancy X230.
You’ll need SPI flashing equipment in order to follow this guide. The official Libreboot documentation recommends against the Raspberrypi Pi as it supports some nonfree software (inter alia). You can use basically any board with the correct GPIO pins but you’ll have to determine the pinout yourself. I find that since most guides are written for the Pi and a lot of people (including me) have them already, it’s a decent choice.
Item | Notes | Link |
---|---|---|
SBC for SPI flashing | If you don’t know where to start, just go with the raspberry pi 3B | Raspberrypi.com |
Dupont Cables | There are lots of places to get these for very cheap | Amazon |
SOIC clip(s) | Finding these things outside mainland china is almost impossible. The link provided is afaik the only place to get them at a reasonable price in North America. | Valutronics - 4MB |
Step 1: Since you can’t get any precompiled binaries, you’ll have to download osboot’s build system from git. It’s probably also a good idea to create a work directory for this project.
mkdir work ; cd work
git clone https://notabug.org/osboot/osbmk
cd osbmk
Step 2: Osboot will generally handle all of the complicated procedures for dealing with nonfree blobs. Most supported boards (including the X220, T420, and X230) support automatic blob insertion. Basically, osboot will try to download the intel management engine, then neuter and truncate it for you. The blobs are not redistributable, so you’ll have to have an active internet connection the first time you try to build a rom.
To build a rom for any supported board, simply pass the name of the board to the rom builder script from osbmk root. All supported boards are listed under resources/coreboot
In general, all ’30 boards (x230, t430, etc.) are 12mb, and ’20 boards are 8mb. The 16mb configurations are only for those who want to upgrade the chip on their board.
./build boot roms x230_12mb
If you don’t have global git credentials stored on your machine then the compilation of osboot might fail. You can fix this by setting placeholder credentials in coreboot.
cd coreboot
git config user.name || git config user.name 'osbmkplaceholder'
git config user.email || git config user.email 'placeholder@osbmkplaceholder.com'
cd ..
Roms are in bin/x230_12mb/. In general, you want to use the rom named grub*libgfxinit_corebootfb*.rom
Step 3: The stock GbE included in osbmk defines the mac address for the ethernet nic. Leaving the GbE alone is probably fine. You will run into issues if you have two osbooted machines with the same stock GbE connected to the same network via ethernet. To be safe, you can set your mac address to match the one the machine came with. For example:
./blobutil inject -r bin/x230_12mb/grub_x230_12mb_libgfxinit_corebootfb_usqwerty.rom -b x230_12mb -m 00:24:7E:16:E3:81
Step 3A: If you’re flashing a ’30 series, then you’re almost certainly dealing with a two-chip configuration. You can skip this step if you’re targeting a ’20 series. The only way you will have a single chip on a ’30 is if you manually remove SPI2, cut it’s connections on the mobo, and edit the firmware descriptor manually. It is much easier to simply split the rom and flash each chip separately.
dd if=osboot.rom of=top.rom bs=1M skip=8
dd if=osboot.rom of=bottom.rom bs=1M count=8
The top.rom is for the smaller 4mb flash chip whereas the bottom portion is for the larger 8MB flash chip. Don’t worry if you’re confused as to which is which; flashrom will only proceed if the file size matches the chip size.
Step 4: Proceed to flashing. Note that you’ll likely have to use the manual method.