Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

Warning

This is an unofficial documentation collection. See libreboot.org for official information.

Libreboot is libre boot firmware that replaces the proprietary BIOS or UEFI firmware on supported motherboards. Libreboot composes two things:

coreboot
Hardware initialisation, while minimising unwanted vendor functionality (e.g. neutralising the Intel Management Engine where present).
A payload
Runs after coreboot. Libreboot ships SeaBIOS, GRUB, and U-Boot as options, depending on the board. Usually loads your operating system’s bootloader, to then load your operating system’s kernel.

Not a fork of coreboot

Libreboot is a coreboot distribution, in the same way that Alpine Linux is a Linux distribution. Libreboot makes coreboot accessible and easy to use for non-technical users by providing a fully automated build system and user-friendly installation instructions along with regular binary releases with pre-compiled ROM images. Building regular coreboot without Libreboot’s automated build system requires significantly more technical knowledge.

Where to start

You want to install Libreboot on hardware you already own.
Find your board under Targets. Each board page tells you exactly what steps apply to it.
You want hardware with Libreboot already on it.
Minifree sells supported machines preinstalled, and operates a paid install service. Minifree is run by Libreboot’s lead developer; sales fund the project.
You want to know what is and isn’t free software in Libreboot.
See freedom status and the binary blob policy.
You have a question.
The FAQ covers common ones. For anything else, #libreboot on Libera.Chat is where development and user support happen.

FAQ

For installing or troubleshooting a specific board, see Targets. For the freedom status of a given board, see Freedom. This page covers questions that don’t fit neatly into either.

General

How do I install Libreboot?

Find your board under Targets. Each board page covers exactly the steps that apply to it.

How can I help?

See Contributing. Reporting bugs and testing release candidates on hardware you own is useful and doesn’t require deep firmware experience.

Can my motherboard be ported to Libreboot?

Any motherboard supported by coreboot can be ported. The current set is listed under Targets.

Specific board issues

thinkpad_acpi fails to load on post-Haswell ThinkPads

On the T440p, W541, and T480 / T480s, modprobe thinkpad_acpi may fail with:

modprobe: ERROR: could not insert 'thinkpad_acpi': "No such device"

Without the module, temperature reporting, battery info, and fan speed reporting/control may not work.

To force-load the module, add

options thinkpad_acpi force_load=1

to a file in /etc/modprobe.d/, or pass thinkpad_acpi.force_load=1 on the kernel command line.

On the T480 specifically, force-loading may turn off rfkill (you will have to manually unblock wlan) and Fn keys F9–F12 may stop working.

Battery monitoring with TLP

Install the tlp package and enable the service. On Debian:

apt-get install tlp tlp-rdw
systemctl enable --now tlp

Then tlp-stat -b (as root) shows battery details. See man tlp-stat for everything else.

Uneven backlight on GM45 ThinkPads

There is no reliable way to detect the correct PWM value in coreboot, so the default is used. This produces uneven backlight on some CCFL panels, but not on LED panels. Workaround: adjust backlight from your distribution.

GM45 ThinkPad ethernet doesn’t autoconnect

This happens on the original BIOS as well; it’s a hardware quirk. With NetworkManager, restarting the service when the cable is plugged in is the usual workaround:

sudo systemctl restart NetworkManager

PIKE2008 module hangs KCMA-D8 / KGPE-D16

Loading the option ROM from the PIKE2008 module hangs the system at boot. Workarounds: use the module from a Linux kernel payload (e.g. LinuxBoot), or boot from regular SATA via SeaGRUB / SeaBIOS and then let Linux drive the PIKE2008 module; Linux can use it without loading the option ROM.

Capturing kernel panic logs over the network

Use the kernel’s netconsole from a second machine. The panicking machine is the source; the machine receiving logs is the target. The source must be on ethernet and the target reachable when the panic happens.

On the target, start a UDP listener:

nc -u -l -p 6666

On the source (as root), mount configfs if it isn’t already:

modprobe configfs
mkdir -p /sys/kernel/config
mount none -t configfs /sys/kernel/config

Find the source ethernet interface (ip address) and the target’s IPv4 address, then set up the netconsole target:

iface=enp0s29f8u1     # change me
tgtip=192.168.1.2     # change me

modprobe netconsole
cd /sys/kernel/config/netconsole
mkdir target1 && cd target1
srcip=$(ip -4 addr show dev "$iface" | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+')
echo "$srcip" > local_ip
echo "$tgtip" > remote_ip
echo "$iface" > dev_name
arping -I "$iface" "$tgtip" -f | grep -o '..:..:..:..:..:..' > remote_mac
echo 1 > enabled
dmesg -n debug

Plug a USB device into the source for a test; log lines should appear in the netcat output on the target. Then reproduce the panic.

Flashing

What does a flash chip look like?

See Identifying the flash chip.

How do I program an SPI flash chip?

See External SPI flashing.

Can I use a CH341A programmer?

Not without modifying it. See Don’t use CH341A.

flashprog complains about /dev/mem access

Reboot with iomem=relaxed on the kernel command line, or use a kernel without CONFIG_STRICT_DEVMEM. On NetBSD/OpenBSD, the equivalent is kern.securelevel=-1. See Internal flashing for details.

How do I pad a ROM before flashing?

It is usually better to use a ROM image that already matches the flash chip size. If you must pad:

Create a zeroed file of the size difference. To pad a 2 MiB image to fit a 16 MiB chip:

truncate -s 14MiB pad.bin

For x86 descriptorless images, pad before the ROM:

cat pad.bin yourrom.rom > yourrom.rom.new

For ARM and x86 with an Intel Flash Descriptor, pad after the ROM:

cat yourrom.rom pad.bin > yourrom.rom.new

cbfstool cannot operate on padded images, so apply all CBFS changes before padding.

To remove padding (e.g. after dumping a flash chip to operate on it with cbfstool), use dd. To extract a 2 MiB descriptorless ROM from a padded 16 MiB image:

dd if=dump.bin of=yourrom.rom ibs=14MiB skip=1

Configuration

How do I change BIOS settings?

Most settings you’d find in a vendor BIOS setup screen don’t exist on Libreboot; coreboot is configured at build time, not interactively. Some runtime configuration options live in the CMOS table and can be set with nvramtool (in coreboot/util/nvramtool/):

nvramtool -C yourrom.rom -a              # list available options
nvramtool -C yourrom.rom -w name=value   # change one

This modifies the ROM image; you then re-flash it.

In practice, you don’t need to change anything in most cases.

How do I write-protect the flash chip?

By default Libreboot leaves the flash unprotected so users can update it without external programmers. On supported boards you can lock the flash read-only at the OS level, with external flashing still possible. See GRUB hardening.

Do I need to install a bootloader on disk?

If you’re using a Libreboot image with the GRUB payload, no; GRUB is already in the flash chip and will boot your OS directly. You can even remove the disk and still boot a USB installer.

If you’re using SeaBIOS, yes; it expects a normal MBR bootloader on disk, the same as proprietary firmware would.

If you’re using U-Boot, you probably know what you’re doing.

Do I need to re-flash when I reinstall my OS?

No. With the GRUB payload, Libreboot’s GRUB will pick up a grub.cfg on disk if one exists and chainload it. You can also load configs from a USB drive. If you want to override the default, see Modifying grub.cfg in CBFS.

With SeaBIOS, this question doesn’t really apply, it just runs whatever bootloader is on disk.

If you’re using U-Boot, you probably know what you’re doing.

Operating systems

Fedora won’t boot past GRUB

Fedora’s default grub.cfg tries to boot Linux in 16-bit mode, which doesn’t work on coreboot. Adjust Fedora’s GRUB configuration. See the Linux notes.

Windows?

No.

Can I run Plan 9?

You’ll need a VGA option ROM in the firmware image — Plan 9 doesn’t drive the coreboot framebuffer.

What about other operating systems?

Most things should work but few have been actively tested. If you try something and it works (or doesn’t), reports are welcome.

Download

Some ROMs may need to be prepared before flashing. Refer to board-specific documentation.

GPG signing keys

Libreboot releases are signed with GnuPG. Newest keys go first.

HTTP(S) mirrors

rsync mirrors

ROM filename format

Overview

Common

External SPI flashing

Programmers

Don’t use CH341A

Identifying the flash chip

Wiring

Intel

Boards

Acer G43T-AM3

Apple MacBook 1,1 / 2,1

Dell Latitude (various)

Dell OptiPlex 3050 Micro

Dell OptiPlex 7010 / 9010 / T1650

Dell OptiPlex 7020 / 9020 / XE2 / T1700

Dell OptiPlex 780

Gigabyte GA-G41M-ES2L

HP Elite 8200 SFF/MT

HP Elite 8300 USDT

HP EliteBook 2170p

HP EliteBook 2560p

HP EliteBook 2570p

HP EliteBook 820 G2

HP EliteBook 8460p

HP EliteBook 8470p

HP EliteBook 8560w

HP EliteBook Folio 9470m

Intel D945GCLF

Lenovo ThinkPad R400

Lenovo ThinkPad T400 / T400s

Lenovo ThinkPad T420 / T520

Lenovo ThinkPad T440p

Lenovo ThinkPad T480 / T480s

Lenovo ThinkPad T500 / W500

Lenovo ThinkPad T60

Lenovo ThinkPad W541

Lenovo ThinkPad X200

Lenovo ThinkPad X230 / T430 / T530 / W530

Lenovo ThinkPad X60 / X60 Tablet

ROM preparation

Internal flashing

Ivy Bridge HDA_SDO from vendor BIOS

Pitfalls: ME, Boot Guard, FSP

Microcode

deguard

nvmutil

AMD

Boards

ASUS KCMA-D8

ASUS KFSN4-DRE

ASUS KGPE-D16

Pitfalls: PSP, AGESA

ARM Chromebooks

ChromeOS setup (dev mode, write protect)

Internal flashing

Boards

ASUS Chromebook C201 (veyron-speedy)

ASUS Chromebook Flip C101 (gru-bob)

Samsung Chromebook Plus (gru-kevin)

Samsung Chromebook Plus XE513C24

Emulated

QEMU x86

QEMU ARM64

Other

Sony PlayStation

Overview

GRUB

Hardening / Secure libreBoot

Encrypted /boot (LUKS2 + argon2id)

Modifying grub.cfg in CBFS

Custom keymap

SeaBIOS

U-Boot

U-Boot on x86

Booting Arch Linux ARM

Booting Debian Bookworm

Booting OpenBSD

Linux

BSD

FreeBSD suspend/resume speedup

Overview

26.01

25.06 Luminous Lemon

20241206

rev11

rev10

rev9

rev8

rev7

Older releases

Overview

Binary blob policy

Freedom status by board

Firmware out of scope

Contributing

Community

People

Donate

License