Here is what the boot process looks like with Coreboot installed:
The first part of the boot process (labelled as "Coreboot Internal" in the diagram above) is largely hidden from the user. The boot process is illustrated below:
To install any GNU/Linux OS, here is a sequence of steps:
Any GNU/Linux OS would work very well on your LC230 laptop. (Some owners have also installed and used FreeBSD on it.)
LC230 is configured to run without any proprietary firmware and hence, any of the following operating systems would work well by default:
!!! tip
The [Rasperrby Pi Imager](https://www.raspberrypi.org/software/) is a good
tool to use to write an OS image to a USB disk. [Balena Etcher](https://www.balena.io/etcher/) is another
one.
The USB needs to be plugged in before you reboot the laptop - or else SeaBIOS will not detect it and show it as a boot option.
!!! info
The blue USB ports on the left side of the laptop are USB3 ports. If you
have a USB disk that works with USB3, then using these ports will give you
much better USB disk performance.
The USB port on the right side (yellow in colour) is a USB2 port.
Press ++escape++ on boot and choose the USB disk as the boot device
By default, the first boot option is chosen to boot off. This is usually the 2.5" SATA disk if it is plugged in to the laptop. To choose another boot device, you need to press ++escape++ and then choose the desired boot device from the SeaBIOS menu.
If you have a 2.5" SATA disk, then a USB disk would be the second boot device. If you have a 2.5" SATA disk and a mSATA disk, then the USB disk would be the third boot device.
You can now proceed with the OS installation as normal.
The LC230 does not provide a UEFI BIOS (like the default Lenovo BIOS firmware).
SeaBIOS is a pc-bios payload and most GNU/Linux OS installers will detect that
and install the correct bootloader. This would be grub-pc
if you choose to
use Grub and Debian.
To flash Coreboot to the x230 motherboard, the first step is to flash the BIOS externally - ie. using a SIOC-8 flashing clip connecting to the BIOS chips:
However, as a part of the external flashing process, the BIOS is unlocked. This means that you can update / modify the BIOS on the SPI Flash internally - from within the operating system. Here are some reasons to do that and the steps involved.
The first things to do before you can flash Coreboot internally, is to boot the kernel with an additional option:
iomem=relaxed
On Debian (and derived operating systems such as Ubuntu), you can make this a permanent setting:
Edit the file: /etc/default/grub
Update the line GRUB_CMDLINE_LINUX
to read:
GRUB_CMDLINE_LINUX="iomem=relaxed"
Run: update-grub
to update the Grub configuration.
You can verify the coreboot version (as well as the fact that you're running
coreboot) by using the dmidecode
utility as follows:
$ sudo dmidecode -t bios
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x0000, DMI type 0, 26 bytes
BIOS Information
Vendor: coreboot
Version: CBET4000 4.10-1082-g4357a82076-dirty
Release Date: 10/20/2019
ROM Size: 12 MB
Characteristics:
PCI is supported
PC Card (PCMCIA) is supported
BIOS is upgradeable
Selectable boot is supported
ACPI is supported
Targeted content distribution is supported
BIOS Revision: 4.10
Firmware Revision: 0.0
$ sudo dmidecode -t system
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: LENOVO
Product Name: 2325BU3
Version: ThinkPad X230
Serial Number: PK1HM8E
UUID: ce136601-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Wake-up Type: Reserved
SKU Number: Not Specified
Family: ThinkPad X230
Handle 0x000B, DMI type 32, 11 bytes
System Boot Information
Status: No errors detected
flashrom
The primary tool for operating on your BIOS is called flashrom
. The Debian
package is also called by the same name and can be installed as:
apt-get install flashrom
If the kernel is booted correctly with iomem=relaxed
, you can run flashrom
:
flashrom -pinternal
Ouput:
$ sudo flashrom -pinternal
flashrom v1.2 on Linux 5.10.9-gnu (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
coreboot table found at 0xbff51000.
Found chipset "Intel QM77".
Enabling flash write... SPI Configuration is locked down.
Enabling hardware sequencing due to multiple flash chips detected.
OK.
Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.
No operations were specified.
!!! tip
Sometimes `flashrom` will not detect the internal flash chip, though it
might very well be able to confirm the BIOS type and machine name. In such
cases, you can try to run `flashrom` as: `flashrom
-pinternal:laptop=force_I_want_a_brick`. This is not completely safe
You can dump the BIOS to a file:
$ flashrom -pinternal -r lc230-coreboot.rom
This will read the BIOS to a file: lc230-coreboot.rom
. This file will be 12 MB in size.
$ sudo flashrom -pinternal -r lc230.rom
flashrom v1.2 on Linux 5.10.9-gnu (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
coreboot table found at 0xbff51000.
Found chipset "Intel QM77".
Enabling flash write... SPI Configuration is locked down.
Enabling hardware sequencing due to multiple flash chips detected.
OK.
Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.
Reading flash... done.
$ ls -lh lc230-coreboot.rom
-rw-r--r-- 1 root root 12M Feb 8 04:46 lc230-coreboot.rom
You can now write back to the BIOS chips as follows:
$ sudo flashrom -pinternal -w lc230-coreboot.rom
flashrom v1.2 on Linux 5.10.9-gnu (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
coreboot table found at 0xbff51000.
Found chipset "Intel QM77".
Enabling flash write... SPI Configuration is locked down.
Enabling hardware sequencing due to multiple flash chips detected.
OK.
Found Programmer flash chip "Opaque flash chip" (12288 kB, Programmer-specific) mapped at physical address 0x0000000000000000.
Reading old flash chip contents... done.
Erasing and writing flash chip...
Warning: Chip content is identical to the requested image.
Erase/write done
The Skulls Coreboot distribution provides built in scripts to upgrade the BIOS. The update procedure is detailed here. Your LC230 ships with the latest release of Skull available at the time of shipping the laptop to you. You can upgrade skulls using the instructions above.
If you want to experiment with the Heads firmware, instructions are available on the Heads website as well as in the Skulls documentation.
Your LC230 ships with a SeaBIOS payload called nvramcui
that allows you to
configure coreboot behaviour and save the settings to nvram.
The fn_ctrl_swap
on the 2nd page of the nvramcui
settings page enables you
to toggle the ++fn++ and ++control++ swap. If you like to have the control key
on the bottom left corner of the keyboard, then you can set this option to Enable
.
The x230 GPU does not have dedication RAM. Instead it shares its memory with
the main system memory. You can configure how much RAM is dedicated to the GPU
via the gfx_uma_size
option on the 3rd page of the nvramcui
settings.
Pressing the ++left++ and ++right++ arrow keys you can iterate over all the available settings for this option.
You can also configure the following behaviour via nvramcui:
Always On USB: By enabling this option, you can configure the USB ports to be always on - even when the laptop is suspended.
Enable/Disable Trackpoing, Touchpad: You can toggle the touchpad
and
trackpoint
options to enable or disable the the touchpad and trackpoint
respectively.