diff --git a/lagarto-ox.nix b/lagarto-ox.nix index 571cc1c..d3c3d25 100644 --- a/lagarto-ox.nix +++ b/lagarto-ox.nix @@ -546,6 +546,91 @@ EOF ''; + # A tarball with all the parts to boot NixOS in a FPGA + fpga-tarball = let + build = config.system.build; + in prev.stdenv.mkDerivation rec { + name = "nixos-riscv"; + src = ./fpga; + + COMMIT = if self ? rev then self.rev + else throw ("Refusing to build tarball from a dirty Git tree!"); + + TOPLEVEL = build.toplevel; + OPENSBI = final.opensbi; + KERNEL = build.kernel; + INITRD = build.initialRamdisk; + ROOTFS = build.sdImage; + UBOOT_ENV = final.uboot-env; + BITSTREAM = final.bitstream; + BOOTROM = final.bootrom; + bitName = builtins.baseNameOf BITSTREAM; + + unpackPhase = '' + mkdir -p src/nixos-riscv + ln -s $src fpga + fpga/upload.sh src/nixos-riscv + chmod +w -R src + sourceRoot=src + ''; + + buildPhase = '' + cat > nixos-riscv/README.txt < + + These files allow you to boot NixOS on Lagarto Ox. They correspond to + this commit: + + https://pm.bsc.es/gitlab/rarias/nixos-riscv/-/commit/${COMMIT} + + Here are the pieces used by this system: + + COMMIT = ${COMMIT} + TOPLEVEL = ${TOPLEVEL} + OPENSBI = ${OPENSBI} + KERNEL = ${KERNEL} + INITRD = ${INITRD} + ROOTFS = ${ROOTFS} + UBOOT_ENV = ${UBOOT_ENV} + BITSTREAM = ${BITSTREAM} + BOOTROM = ${BOOTROM} + + Copy these files into a MEEP FPGA node, then allocate a FPGA node and + run from this directory (don't forget the dot at the end): + + $ ./run-node.sh . + + That would flash the bitstream and NixOS and boot the whole system + until the login, and exit after some inactivity period. You should see + this message near the end: + + __________________ + < Welcome to NixOS > + ------------------ + ^__^ + (oo)_______ + (__) )/ + ||----w | + || || + + If you can read this message then then you have + successfully booted NixOS into the login shell. + + EOF + ''; + + installPhase = '' + mkdir -p $out + tar czvf $out/${COMMIT}.tar.gz nixos-riscv + ''; + + nativeBuildInputs = with final.buildPackages; [ rsync ]; + }; + opensbi = prev.opensbi.overrideAttrs (old: rec { #version = "1.4"; version = "1.5";