Coreboot: Difference between revisions

From NixOS Wiki
imported>Milahu
+ qemu: test the new image
imported>Milahu
fix nix-shell with mkShellNoCC
Line 1: Line 1:
== Building in nix-shell ==
== Building in nix-shell ==
To build your own coreboot bios:
To build your own coreboot bios:
Create a <code>shell.nix</code>, and run <code>nix-shell</code>
<syntaxhighlight lang="nix">
# 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"
  '';
}
</syntaxhighlight>
Now we can build coreboot:


<syntaxHighlight lang=bash>
<syntaxHighlight lang=bash>
Line 9: Line 41:
du -sh . # 700 MByte
du -sh . # 700 MByte


nix-shell -p ncurses bison flex clang gnat10 gnatboot zlib acpica-tools pkgconfig qemu
# configure
NIX_LDFLAGS="$NIX_LDFLAGS -lncurses" make menuconfig
make menuconfig
 
# build toolchain
# this can take some hours
make crossgcc CPUS=$(nproc)
make crossgcc CPUS=$(nproc)
# build firmware
make
make


# test firmware
qemu-system-x86_64 -bios build/coreboot.rom -serial stdio
qemu-system-x86_64 -bios build/coreboot.rom -serial stdio
</syntaxHighlight>
</syntaxHighlight>
* gnat10 provides gnat
* gnatboot provides gnat1


=== Compiler version ===
=== Compiler version ===

Revision as of 12:16, 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
make menuconfig

# build toolchain
# this can take some hours
make crossgcc CPUS=$(nproc)

# build firmware
make

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

Compiler version

gcc (provided by clang) and gnat (the GNU Ada compiler) must have the same version

gcc --version
gnat --version

For example, both have version 10.3.0

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