Coreboot: Difference between revisions

From NixOS Wiki
imported>Milahu
No edit summary
imported>Milahu
build toolchain only for x64
Line 47: Line 47:
# build toolchain
# build toolchain
# this can take some hours
# this can take some hours
make crossgcc CPUS=$(nproc)
# list all targets: make help
make crossgcc-x64 CPUS=$(nproc)


# build firmware
# build firmware

Revision as of 15:51, 26 October 2021

Building in nix-shell

To build your own coreboot bios:

Create a shell.nix, and run nix-shell

# shell.nix

# NOTE we need mkShellNoCC
# mkShell would add the regular gcc, which has no ada (gnat)
# https://github.com/NixOS/nixpkgs/issues/142943

with import <nixpkgs> { };
mkShellNoCC {
  buildInputs = [
    gnat11 # gcc with ada
    #gnatboot # gnat1
    ncurses # make menuconfig
    #bison # generate parsers
    #flex
    #clang
    zlib
    #acpica-tools # iasl
    pkgconfig
    qemu # test the image
  ];
  shellHook = ''
    # TODO remove?
    NIX_LDFLAGS="$NIX_LDFLAGS -lncurses"
  '';
}

Now we can build coreboot:

git clone https://review.coreboot.org/coreboot.git --depth 1
cd coreboot
du -sh . # 200 MByte
git submodule update --init --checkout --depth 1
du -sh . # 700 MByte

# configure
# set mainboard, flash size, ...
make menuconfig

# build toolchain
# this can take some hours
# list all targets: make help
make crossgcc-x64 CPUS=$(nproc)

# build firmware
make

# test firmware
qemu-system-x86_64 -bios build/coreboot.rom -serial stdio

Skip building toolchain

We can use our system toolchain to build coreboot firmware, but this is not recommended per coreboot docs:

you can possibly use your system toolchain, but the results are not reproducible, and may have issues, so this is not recommended

To use the system toolchain, in make menuconfig, enable General Setup > Allow building with any toolchain

Building as derivation

coreboot is pretty picky about the toolchain it is built with and thus using the toolchain it comes with is the easiest path to success. There are commented Nix expressions that build coreboot here.

See also