Emery Hemingway
8379dccf12
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.
70 lines
2.0 KiB
Nix
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";
|
|
};
|
|
};
|
|
|
|
}
|