nixos: add genode.init.coreROMs option
Explicitly specify ROMs that must route past the nix-store.
This commit is contained in:
parent
635383f9b0
commit
467f595830
|
@ -90,11 +90,15 @@ in {
|
|||
in (foldl' f "[" inputs) + "]";
|
||||
};
|
||||
|
||||
romDirectories = mapAttrs (name: value:
|
||||
pkgs.symlinkJoin {
|
||||
name = "${name}-rom";
|
||||
paths = value.inputs;
|
||||
}) config.genode.init.children;
|
||||
romDirectories = filterAttrs (_: value: value != null) (mapAttrs
|
||||
(name: value:
|
||||
if value.inputs == [ ] then
|
||||
null
|
||||
else
|
||||
pkgs.symlinkJoin {
|
||||
name = "${name}-rom";
|
||||
paths = value.inputs;
|
||||
}) config.genode.init.children);
|
||||
|
||||
in {
|
||||
|
||||
|
@ -115,18 +119,33 @@ in {
|
|||
report_rom
|
||||
vfs
|
||||
])));
|
||||
storeRomPolicies = let
|
||||
policies = mapAttrsToList
|
||||
(name: value: '', { mapKey = "${name}", mapValue = "${value}" }'')
|
||||
romDirectories;
|
||||
in "[${toString policies}]";
|
||||
|
||||
storeRomPolicies = mapAttrsToList
|
||||
(name: value: '', { mapKey = "${name}", mapValue = "${value}" }'')
|
||||
romDirectories;
|
||||
|
||||
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" { } ''
|
||||
cat > $out << EOF
|
||||
let Genode = env:DHALL_GENODE in
|
||||
${./store-wrapper.dhall}
|
||||
(${config.genode.init.configFile})
|
||||
"${config.system.build.tarball.fileName}.tar"
|
||||
$(stat --format '%s' ${tarball})
|
||||
${storeRomPolicies}
|
||||
([${toString storeRomPolicies} ] : Genode.Prelude.Map.Type Text Text)
|
||||
([${extraRoutes} ] : List Genode.Init.ServiceRoute.Type)
|
||||
${manifest}
|
||||
EOF
|
||||
'';
|
||||
|
|
|
@ -55,6 +55,15 @@ in {
|
|||
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" ];
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
|
|
|
@ -16,9 +16,11 @@ in λ(subinit : Init.Type) →
|
|||
λ(storeName : Text) →
|
||||
λ(storeSize : Natural) →
|
||||
λ(storeRomPolicies : Prelude.Map.Type Text Text) →
|
||||
λ(routes : List Init.ServiceRoute.Type) →
|
||||
λ(bootManifest : Manifest/Type) →
|
||||
Genode.Boot::{
|
||||
, config = Init::{
|
||||
, routes
|
||||
, children =
|
||||
let child = Prelude.Map.keyValue Child.Type
|
||||
|
||||
|
@ -167,13 +169,7 @@ in λ(subinit : Init.Type) →
|
|||
)
|
||||
|
||||
in parentROMs
|
||||
[ "ld.lib.so"
|
||||
, "vfs.lib.so"
|
||||
, "init"
|
||||
, "platform_info"
|
||||
, "core_log"
|
||||
, "kernel_log"
|
||||
]
|
||||
[ "ld.lib.so", "vfs.lib.so", "init" ]
|
||||
# [ Init.ServiceRoute.parent "IO_MEM"
|
||||
, Init.ServiceRoute.parent "IO_PORT"
|
||||
, Init.ServiceRoute.parent "IRQ"
|
||||
|
|
Loading…
Reference in New Issue
Block a user