|
|
|
@ -40,131 +40,139 @@ in λ ( params
|
|
|
|
|
Init::{ |
|
|
|
|
, routes = |
|
|
|
|
parentRoutes [ "File_system", "Rtc", "Terminal", "Timer" ] |
|
|
|
|
, children = toMap |
|
|
|
|
{ vfs = |
|
|
|
|
Child.flat |
|
|
|
|
Child.Attributes::{ |
|
|
|
|
, binary = "vfs" |
|
|
|
|
, exitPropagate = True |
|
|
|
|
, resources = Genode.Init.Resources::{ |
|
|
|
|
, caps = 256 |
|
|
|
|
, ram = Genode.units.MiB 8 |
|
|
|
|
} |
|
|
|
|
, config = Init.Config::{ |
|
|
|
|
, content = |
|
|
|
|
[ VFS.vfs |
|
|
|
|
( [ VFS.dir |
|
|
|
|
"dev" |
|
|
|
|
( [ VFS.dir "pipes" [ VFS.leaf "pipe" ] |
|
|
|
|
, VFS.leaf "log" |
|
|
|
|
, VFS.leaf "null" |
|
|
|
|
, VFS.leafAttrs |
|
|
|
|
"terminal" |
|
|
|
|
( toMap |
|
|
|
|
{ name = "entropy" |
|
|
|
|
, label = "entropy" |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
, VFS.leaf "rtc" |
|
|
|
|
, VFS.leaf "zero" |
|
|
|
|
] |
|
|
|
|
# socketsVfs |
|
|
|
|
) |
|
|
|
|
, VFS.dir |
|
|
|
|
"usr" |
|
|
|
|
[ VFS.dir |
|
|
|
|
"bin" |
|
|
|
|
[ VFS.symlink |
|
|
|
|
"env" |
|
|
|
|
"${params.coreutils}/bin/env" |
|
|
|
|
, children = |
|
|
|
|
toMap |
|
|
|
|
{ vfs = |
|
|
|
|
Child.flat |
|
|
|
|
Child.Attributes::{ |
|
|
|
|
, binary = "vfs" |
|
|
|
|
, exitPropagate = True |
|
|
|
|
, resources = Genode.Init.Resources::{ |
|
|
|
|
, caps = 256 |
|
|
|
|
, ram = Genode.units.MiB 8 |
|
|
|
|
} |
|
|
|
|
, config = Init.Config::{ |
|
|
|
|
, content = |
|
|
|
|
[ VFS.vfs |
|
|
|
|
( [ VFS.dir |
|
|
|
|
"dev" |
|
|
|
|
( [ VFS.dir |
|
|
|
|
"pipes" |
|
|
|
|
[ VFS.leaf "pipe" ] |
|
|
|
|
, VFS.leaf "log" |
|
|
|
|
, VFS.leaf "null" |
|
|
|
|
, VFS.leafAttrs |
|
|
|
|
"terminal" |
|
|
|
|
( toMap |
|
|
|
|
{ name = "entropy" |
|
|
|
|
, label = "entropy" |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
, VFS.leaf "rtc" |
|
|
|
|
, VFS.leaf "zero" |
|
|
|
|
] |
|
|
|
|
# socketsVfs |
|
|
|
|
) |
|
|
|
|
, VFS.dir |
|
|
|
|
"usr" |
|
|
|
|
[ VFS.dir |
|
|
|
|
"bin" |
|
|
|
|
[ VFS.symlink |
|
|
|
|
"env" |
|
|
|
|
"${params.coreutils}/bin/env" |
|
|
|
|
] |
|
|
|
|
] |
|
|
|
|
] |
|
|
|
|
, VFS.dir "tmp" [ VFS.leaf "ram" ] |
|
|
|
|
, VFS.dir |
|
|
|
|
"nix" |
|
|
|
|
[ VFS.dir |
|
|
|
|
"store" |
|
|
|
|
[ VFS.fs |
|
|
|
|
VFS.FS::{ label = "nix-store" } |
|
|
|
|
, VFS.dir "tmp" [ VFS.leaf "ram" ] |
|
|
|
|
, VFS.dir |
|
|
|
|
"nix" |
|
|
|
|
[ VFS.dir |
|
|
|
|
"store" |
|
|
|
|
[ VFS.fs |
|
|
|
|
VFS.FS::{ |
|
|
|
|
, label = "nix-store" |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
] |
|
|
|
|
] |
|
|
|
|
] |
|
|
|
|
# params.extraVfs |
|
|
|
|
) |
|
|
|
|
] |
|
|
|
|
, policies = |
|
|
|
|
[ Init.Config.Policy::{ |
|
|
|
|
, service = "File_system" |
|
|
|
|
, label = Init.LabelSelector.prefix "ExecStart" |
|
|
|
|
, attributes = toMap |
|
|
|
|
{ root = "/", writeable = "yes" } |
|
|
|
|
# params.extraVfs |
|
|
|
|
) |
|
|
|
|
] |
|
|
|
|
, policies = |
|
|
|
|
[ Init.Config.Policy::{ |
|
|
|
|
, service = "File_system" |
|
|
|
|
, label = Init.LabelSelector.prefix "ExecStart" |
|
|
|
|
, attributes = toMap |
|
|
|
|
{ root = "/", writeable = "yes" } |
|
|
|
|
} |
|
|
|
|
, Init.Config.Policy::{ |
|
|
|
|
, service = "File_system" |
|
|
|
|
, label = Init.LabelSelector.prefix "vfs_rom" |
|
|
|
|
, attributes = toMap |
|
|
|
|
{ root = "/", writeable = "no" } |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
, Init.Config.Policy::{ |
|
|
|
|
, service = "File_system" |
|
|
|
|
, label = Init.LabelSelector.prefix "vfs_rom" |
|
|
|
|
, attributes = toMap |
|
|
|
|
{ root = "/", writeable = "no" } |
|
|
|
|
} |
|
|
|
|
, vfs_rom = |
|
|
|
|
Child.flat |
|
|
|
|
Child.Attributes::{ |
|
|
|
|
, binary = "cached_fs_rom" |
|
|
|
|
, resources = Genode.Init.Resources::{ |
|
|
|
|
, ram = Genode.units.MiB 32 |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
, vfs_rom = |
|
|
|
|
Child.flat |
|
|
|
|
Child.Attributes::{ |
|
|
|
|
, binary = "cached_fs_rom" |
|
|
|
|
, resources = Genode.Init.Resources::{ |
|
|
|
|
, ram = Genode.units.MiB 32 |
|
|
|
|
} |
|
|
|
|
, config = Init.Config::{ |
|
|
|
|
, policies = |
|
|
|
|
[ Init.Config.Policy::{ |
|
|
|
|
, service = "ROM" |
|
|
|
|
, label = Init.LabelSelector.prefix "ExecStart" |
|
|
|
|
, config = Init.Config::{ |
|
|
|
|
, policies = |
|
|
|
|
[ Init.Config.Policy::{ |
|
|
|
|
, service = "ROM" |
|
|
|
|
, label = Init.LabelSelector.prefix "ExecStart" |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
, ExecStart = |
|
|
|
|
Child.flat |
|
|
|
|
Child.Attributes::{ |
|
|
|
|
, binary = params.binary |
|
|
|
|
, exitPropagate = True |
|
|
|
|
, resources = Genode.Init.Resources::{ |
|
|
|
|
, caps = 256 |
|
|
|
|
, ram = Genode.units.MiB params.ramQuotaMiB |
|
|
|
|
} |
|
|
|
|
, config = |
|
|
|
|
( Libc.toConfig |
|
|
|
|
Libc::{ |
|
|
|
|
, stdin = Some "/dev/null" |
|
|
|
|
, stdout = Some "/dev/log" |
|
|
|
|
, stderr = Some "/dev/log" |
|
|
|
|
, pipe = Some "/dev/pipes" |
|
|
|
|
, rng = Some "/dev/entropy" |
|
|
|
|
, rtc = Some "/dev/rtc" |
|
|
|
|
, socket = Some "/dev/sockets" |
|
|
|
|
, vfs = [ VFS.leaf "fs" ] |
|
|
|
|
, args = [ params.binary ] # params.args |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
with attributes = toMap { ld_verbose = "yes" } |
|
|
|
|
, routes = |
|
|
|
|
Prelude.List.map |
|
|
|
|
Text |
|
|
|
|
Init.ServiceRoute.Type |
|
|
|
|
( λ(label : Text) → |
|
|
|
|
Init.ServiceRoute.parentLabel |
|
|
|
|
"ROM" |
|
|
|
|
(Some label) |
|
|
|
|
(Some label) |
|
|
|
|
) |
|
|
|
|
[ "libc.lib.so" |
|
|
|
|
, "libm.lib.so" |
|
|
|
|
, "posix.lib.so" |
|
|
|
|
, "vfs.lib.so" |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
# [ { mapKey = "ExecStart" |
|
|
|
|
, mapValue = |
|
|
|
|
Child.flat |
|
|
|
|
Child.Attributes::{ |
|
|
|
|
, binary = params.binary |
|
|
|
|
, exitPropagate = True |
|
|
|
|
, resources = Genode.Init.Resources::{ |
|
|
|
|
, caps = 256 |
|
|
|
|
, ram = Genode.units.MiB params.ramQuotaMiB |
|
|
|
|
} |
|
|
|
|
, config = |
|
|
|
|
( Libc.toConfig |
|
|
|
|
Libc::{ |
|
|
|
|
, stdin = Some "/dev/null" |
|
|
|
|
, stdout = Some "/dev/log" |
|
|
|
|
, stderr = Some "/dev/log" |
|
|
|
|
, pipe = Some "/dev/pipes" |
|
|
|
|
, rng = Some "/dev/entropy" |
|
|
|
|
, rtc = Some "/dev/rtc" |
|
|
|
|
, socket = Some "/dev/sockets" |
|
|
|
|
, vfs = [ VFS.leaf "fs" ] |
|
|
|
|
, args = [ params.binary ] # params.args |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
with attributes = toMap { ld_verbose = "yes" } |
|
|
|
|
, routes = |
|
|
|
|
Prelude.List.map |
|
|
|
|
Text |
|
|
|
|
Init.ServiceRoute.Type |
|
|
|
|
( λ(label : Text) → |
|
|
|
|
Init.ServiceRoute.parentLabel |
|
|
|
|
"ROM" |
|
|
|
|
(Some label) |
|
|
|
|
(Some label) |
|
|
|
|
) |
|
|
|
|
[ "libc.lib.so" |
|
|
|
|
, "libm.lib.so" |
|
|
|
|
, "posix.lib.so" |
|
|
|
|
, "vfs.lib.so" |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
in Init.toChild init Init.Attributes::{=} |
|
|
|
|