2
0

nixos: add genode.init.coreROMs option

Explicitly specify ROMs that must route past the nix-store.
This commit is contained in:
Ehmry - 2020-11-10 15:49:12 +01:00
parent 635383f9b0
commit 467f595830
3 changed files with 42 additions and 18 deletions

View File

@ -90,11 +90,15 @@ in {
in (foldl' f "[" inputs) + "]"; in (foldl' f "[" inputs) + "]";
}; };
romDirectories = mapAttrs (name: value: romDirectories = filterAttrs (_: value: value != null) (mapAttrs
pkgs.symlinkJoin { (name: value:
name = "${name}-rom"; if value.inputs == [ ] then
paths = value.inputs; null
}) config.genode.init.children; else
pkgs.symlinkJoin {
name = "${name}-rom";
paths = value.inputs;
}) config.genode.init.children);
in { in {
@ -115,18 +119,33 @@ in {
report_rom report_rom
vfs vfs
]))); ])));
storeRomPolicies = let
policies = mapAttrsToList storeRomPolicies = mapAttrsToList
(name: value: '', { mapKey = "${name}", mapValue = "${value}" }'') (name: value: '', { mapKey = "${name}", mapValue = "${value}" }'')
romDirectories; romDirectories;
in "[${toString policies}]";
extraRoutes = lib.concatStringsSep ", " (lib.lists.flatten
(lib.mapAttrsToList (name: value:
map (suffix: ''
{ service =
{ name = "ROM"
, label =
Genode.Init.LabelSelector.Type.Partial
{ prefix = Some "nixos -> ${name}", suffix = Some "${suffix}" }
}
, route = Genode.Init.Route.parent (Some "${suffix}")
}
'') value.coreROMs) config.genode.init.children));
in localPackages.runCommand "boot.dhall" { } '' in localPackages.runCommand "boot.dhall" { } ''
cat > $out << EOF cat > $out << EOF
let Genode = env:DHALL_GENODE in
${./store-wrapper.dhall} ${./store-wrapper.dhall}
(${config.genode.init.configFile}) (${config.genode.init.configFile})
"${config.system.build.tarball.fileName}.tar" "${config.system.build.tarball.fileName}.tar"
$(stat --format '%s' ${tarball}) $(stat --format '%s' ${tarball})
${storeRomPolicies} ([${toString storeRomPolicies} ] : Genode.Prelude.Map.Type Text Text)
([${extraRoutes} ] : List Genode.Init.ServiceRoute.Type)
${manifest} ${manifest}
EOF EOF
''; '';

View File

@ -55,6 +55,15 @@ in {
See https://git.sr.ht/~ehmry/dhall-genode/tree/master/Init/Child/Type See https://git.sr.ht/~ehmry/dhall-genode/tree/master/Init/Child/Type
''; '';
}; };
coreROMs = mkOption {
type = with types; listOf str;
default = [ ];
description = ''
List of label suffixes that when matched against
ROM requests shall be forwared to the core.
'';
example = [ "platform_info" ];
};
}; };
}); });
}; };

View File

@ -16,9 +16,11 @@ in λ(subinit : Init.Type) →
λ(storeName : Text) → λ(storeName : Text) →
λ(storeSize : Natural) → λ(storeSize : Natural) →
λ(storeRomPolicies : Prelude.Map.Type Text Text) → λ(storeRomPolicies : Prelude.Map.Type Text Text) →
λ(routes : List Init.ServiceRoute.Type) →
λ(bootManifest : Manifest/Type) → λ(bootManifest : Manifest/Type) →
Genode.Boot::{ Genode.Boot::{
, config = Init::{ , config = Init::{
, routes
, children = , children =
let child = Prelude.Map.keyValue Child.Type let child = Prelude.Map.keyValue Child.Type
@ -167,13 +169,7 @@ in λ(subinit : Init.Type) →
) )
in parentROMs in parentROMs
[ "ld.lib.so" [ "ld.lib.so", "vfs.lib.so", "init" ]
, "vfs.lib.so"
, "init"
, "platform_info"
, "core_log"
, "kernel_log"
]
# [ Init.ServiceRoute.parent "IO_MEM" # [ Init.ServiceRoute.parent "IO_MEM"
, Init.ServiceRoute.parent "IO_PORT" , Init.ServiceRoute.parent "IO_PORT"
, Init.ServiceRoute.parent "IRQ" , Init.ServiceRoute.parent "IRQ"