sigil/nixos-modules/nova.nix
Emery Hemingway 8379dccf12 Refer to program and library ROMs by store path
Retrieve ROMs in the common case by full store path. This reduces
the need for route policies for driving relative requests into
absolute package paths.

Making library requests by absolute path required libraries to be
stored in the core image as such, and it follows that program
binaries should be handled in the same way. This makes requests
to core and to a file-system store more consistent, and makes
dependency detection more robust.
2021-02-16 15:46:14 +01:00

70 lines
2.0 KiB
Nix

{ config, pkgs, lib, ... }:
with lib;
let
localPackages = pkgs.buildPackages;
utils = import ../lib {
inherit (config.nixpkgs) system localSystem crossSystem;
inherit pkgs;
};
bootDir = pkgs.runCommand "${config.system.name}-bootdir" { } ''
mkdir $out
gz() {
gzip --keep --to-stdout "$1" > "$2"
}
gz ${pkgs.genodePackages.genodeSources}/tool/boot/bender $out/bender.gz
gz ${pkgs.genodePackages.NOVA}/hypervisor-x86_64 $out/hypervisor.gz
gz ${config.genode.boot.image}/image.elf $out/image.elf.gz
'';
in {
genode.core = {
prefix = "nova-";
supportedSystems = [ "x86_64-genode" ];
};
genode.boot.image =
utils.novaImage config.system.name { } config.genode.boot.configFile;
genode.boot.romModules = {
"ld.lib.so" = "${pkgs.genodePackages.base-nova}/lib/ld.lib.so";
timer_drv = "${pkgs.genodePackages.base-nova}/bin/timer_drv";
};
genode.boot.storePaths =
lib.optional (config.genode.boot.storeBackend != "memory") bootDir;
virtualisation.qemu.options =
lib.optionals (!config.virtualisation.useBootLoader) [
"-kernel '${pkgs.genodePackages.bender}/share/bender/bender'"
"-initrd '${pkgs.genodePackages.NOVA}/hypervisor-x86_64 arg=iommu logmem novpid serial,${config.genode.boot.image}/image.elf'"
];
virtualisation.qemu.kernel =
"${pkgs.genodePackages.bender}/share/bender/bender";
virtualisation.qemu.initrd = "${pkgs.genodePackages.NOVA}/hypervisor-x86_64";
virtualisation.qemu.cmdline =
"arg=iommu logmem novpid serial,${config.genode.boot.image}/image.elf";
boot.loader.grub = {
extraEntries = ''
menuentry 'Genode on NOVA' {
insmod multiboot2
insmod gzio
multiboot2 /boot/bender.gz serial_fallback
module2 /boot/hypervisor.gz hypervisor iommu logmem novga novpid serial
module2 /boot/image.elf.gz image.elf
}
'';
extraFiles = {
"bender.gz" = bootDir + "/bender.gz";
"hypervisor.gz" = bootDir + "/hypervisor.gz";
"image.elf.gz" = bootDir + "/image.elf.gz";
};
};
}