Coreboot: Difference between revisions
imported>Milahu m remove "this can take some hours" - it does not, when we build only one toolchain |
imported>Lenzj No edit summary |
||
Line 1: | Line 1: | ||
== Building in nix-shell == | == Building in nix-shell == | ||
Note: the following was tested and working on NixOS 21.11 (Porcupine) while compiling the QEMU target for Coreboot v4.15 as well as Coreboot master (7b168c92f6). | |||
To build your own coreboot bios: | To build your own coreboot bios: | ||
Line 17: | Line 19: | ||
#gnatboot # gnat1 | #gnatboot # gnat1 | ||
ncurses # make menuconfig | ncurses # make menuconfig | ||
m4 flex bison # Generate flashmap descriptor parser | |||
#clang | #clang | ||
zlib | zlib | ||
Line 34: | Line 36: | ||
<syntaxHighlight lang=bash> | <syntaxHighlight lang=bash> | ||
# clone coreboot git repository (latest master) | |||
git clone https://review.coreboot.org/coreboot.git --depth 1 | git clone https://review.coreboot.org/coreboot.git --depth 1 | ||
# or for a specific coreboot version (I.E. version 4.15) | |||
git clone --branch 4.15 https://review.coreboot.org/coreboot.git --depth 1 | |||
# get 3rd party submodules in coreboot repository | |||
cd coreboot | cd coreboot | ||
du -sh . # 200 MByte | du -sh . # ~200 MByte | ||
git submodule update --init --checkout --depth 1 | git submodule update --init --checkout --depth 1 | ||
du -sh . # 700 MByte | du -sh . # ~700 MByte | ||
# configure | # configure | ||
Line 44: | Line 51: | ||
make menuconfig MENUCONFIG_COLOR=blackbg # blackbg = dark mode | make menuconfig MENUCONFIG_COLOR=blackbg # blackbg = dark mode | ||
# build toolchain for a | # build toolchain for a x86 target | ||
# list all targets: make help | # Note: the i386 toolchain is used for all x86 platforms including x86_64. | ||
make crossgcc- | # See https://doc.coreboot.org/tutorial/part1.html | ||
# to list all targets: make help | |||
make crossgcc-i386 CPUS=$(nproc) | |||
# build firmware | # build firmware |
Revision as of 21:26, 28 December 2021
Building in nix-shell
Note: the following was tested and working on NixOS 21.11 (Porcupine) while compiling the QEMU target for Coreboot v4.15 as well as Coreboot master (7b168c92f6).
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
m4 flex bison # Generate flashmap descriptor parser
#clang
zlib
#acpica-tools # iasl
pkgconfig
qemu # test the image
];
shellHook = ''
# TODO remove?
NIX_LDFLAGS="$NIX_LDFLAGS -lncurses"
'';
}
Now we can build coreboot:
# clone coreboot git repository (latest master)
git clone https://review.coreboot.org/coreboot.git --depth 1
# or for a specific coreboot version (I.E. version 4.15)
git clone --branch 4.15 https://review.coreboot.org/coreboot.git --depth 1
# get 3rd party submodules in coreboot repository
cd coreboot
du -sh . # ~200 MByte
git submodule update --init --checkout --depth 1
du -sh . # ~700 MByte
# configure
# set mainboard model, chip size, ...
make menuconfig MENUCONFIG_COLOR=blackbg # blackbg = dark mode
# build toolchain for a x86 target
# Note: the i386 toolchain is used for all x86 platforms including x86_64.
# See https://doc.coreboot.org/tutorial/part1.html
# to list all targets: make help
make crossgcc-i386 CPUS=$(nproc)
# build firmware
make CPUS=$(nproc)
# 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.