Building Coreboot in 2020

In 2014 I bought a Google Chromebook in order to try coreboot.

šŸ“ 2014 - New linux netbook - (Acer Chromebook C710)

I have been running archlinux on the chromebook since 2014 using coreboot and although I have built new versions of coreboot Iā€™ve never posted any updates.
I originally used seabios as a payload but later changed to tianocore for efi.

coreboot is a project to develop open source boot firmware for various architectures.
Its design philosophy is to do the bare minimum necessary to ensure that hardware is usable and then pass control to a different program called the payload.

Building Coreboot

The coreboot build system has improved a lot since 2014 & the documentation is well written.

šŸ“ coreboot documentation

I normally build a test image with the default settings & the coreinfo payload when setting up a new build environment (as documented in the tutorial).
This allows you to test the coreboot image using qemu.

Getting The Build System

Install tools required to build coreboot

sudo pacman -S base-devel curl git gcc-ada ncurses zlib nasm

Download coreboot source

git clone https://review.coreboot.org/coreboot
cd coreboot

Build the coreboot toolchain for x86 & x64

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

Chromebook C710 Config

I uploaded my config to github to make it easier but you may want to use a different payload or make some changes.

Copy the downloaded defconfig to coreboot/.config

cp defconfig .config

Check settings using nconfig (or menuconfig)
I use nconfig as it is easier to read & scroll options (ncurses).

make nconfig

You may also need to copy or extract some files from your system (eg: vbt).

Building Coreboot Image

Once you have everything setup you are ready to build the firmware image.

make

You should see the build output.
If successful you should see the message below.

Built google/parrot (Parrot)

Building Coreboot with the Tianocore payload can take a while.

Installing Coreboot Firmware

The Acer Chromebook C710 has a hidden jumper next to the RAM slots which needs to be shorted out in order to disable the firmware write protect.

You can find the jumper behind some tape on the right of the top RAM slot.

Check Write Protect Status

Open shell in chromeos dev mode.

flashrom -p internal:bus=spi --wp-status

You should see WP: write protect is enabled.

If you see WP: write protect is disabled you are good to go & can skip the next step.

Chromeos uses a custom version of flashrom with wp-status added.
You can build it from source if you want to check write protect in linux.

Disable Write Protect

Once you have the jumper shorted out, boot into chromeos dev mode.

flashrom -p internal:bus=spi --wp-disable
flashrom -p internal:bus=spi --wp-range 0 0

Verify the status

flashrom -p internal:bus=spi --wp-status

You should now see WP: write protect is disabled.

If you get an error on trying to set wp-disable you will need to check the jumper is connected ok & try again.

Flash The Firmware

Flashing untested custom firmware can cause problems
Having a way to recover a bricked device is advisable before trying (eg: Raspberry Pi + SOIC8 Clip)
To use flashrom in linux you will need to boot using the kernel flag iomem=relaxed
This is due to the CONFIG_IO_STRICT_DEVMEM linux kernel option (kernel 4.4+)

Backup existing firmware (copy it to a sdcard or USB stick).

flashrom -p internal -r backup.rom

Write & verify the firmware image.

flashrom -p internal -w coreboot.rom

Now reboot the system & boot using coreboot.

coreboot_tianocore_boot

You should see the splash screen with the coreboot logo (tianocore).

Running Linux

I have various configuration changes for running linux on the C710 on github.

  • Synaptics Tweaks
  • Wifi Tweaks
  • Bluetooth Tweaks
  • Intel Graphics Config

I personally use Archlinux with dm-crypt for full disk encryption.

C710 on Github