Browse Source

Refactor of packaging and testing

- Remove manifests from Dhall configurations and mix all
   test inputs to generate test ROM maps.

 - All loader and timer drivers are name ld.lib.so and timer_drv.

 - Replace packages of multiple Genode Labs targets with functions
   to build individual targets. These packages are not explicitly
   specified unless they require inputs from the source ports or
   extra nativeBuildInputs.

 - Add support for building from Genode world repository.
llvm-10
Emery Hemingway 2 years ago
parent
commit
6d6d585f0f
  1. 25
      apps/generate-manifest/default.nix
  2. 10
      apps/hw-image/default.nix
  3. 2
      apps/linux-image/default.nix
  4. 10
      apps/nova-image/default.nix
  5. 2
      apps/render-init/default.nix
  6. 2
      compositions/pc-drivers.dhall
  7. 13
      flake.lock
  8. 10
      flake.nix
  9. 127
      packages/default.nix
  10. 21
      packages/genodelabs/capslock.patch
  11. 303
      packages/genodelabs/default.nix
  12. 40
      packages/genodelabs/ports.nix
  13. 10
      packages/genodelabs/sources.nix
  14. 38
      packages/genodelabs/targets.nix
  15. 38
      tests/driver-hw-config.dhall
  16. 17
      tests/driver-hw.nix
  17. 41
      tests/driver-linux-config.dhall
  18. 8
      tests/driver-linux.nix
  19. 38
      tests/driver-nova-config.dhall
  20. 17
      tests/driver-nova.nix
  21. 193
      tests/driver_manager.dhall
  22. 34
      tests/driver_manager.nix
  23. 73
      tests/driver_manager.rom.dhall
  24. 7
      tests/log.dhall
  25. 2
      tests/log.nix
  26. 16
      tests/noux.dhall
  27. 6
      tests/noux.nix
  28. 12
      tests/pci.dhall
  29. 9
      tests/pci.nix
  30. 8
      tests/rtc.dhall
  31. 2
      tests/rtc.nix
  32. 7
      tests/signal.dhall
  33. 2
      tests/signal.nix
  34. 10
      tests/solo5/blk.dhall
  35. 10
      tests/solo5/boot-wrapper.dhall
  36. 23
      tests/solo5/default.nix
  37. 12
      tests/solo5/net.dhall
  38. 13
      tests/solo5/net_2if.dhall
  39. 8
      tests/solo5/simple.dhall
  40. 10
      tests/solo5/time.dhall
  41. 29
      tests/sotest-wrapper.dhall
  42. 63
      tests/test-wrapper.dhall

25
apps/generate-manifest/default.nix

@ -15,26 +15,9 @@ writeScriptBin "generate-manifest" ''
echo \'$root\' is not an existing directory >> /dev/stderr
exit 1
fi
set -eu
find="${findutils}/bin/find"
echo -n '{'
if [ -d "$root/bin" ]; then
echo -n ',bin = {'
find $root/bin/ -type f -printf '%f "%p"\n' \
| awk '{print ", "gensub(/\..*/, "", 1, $1)"={mapKey= \""$1"\",mapValue ="$2"}"}'
echo -n '}'
fi
if [ -d "$root/lib" ]; then
echo -n ',lib = {'
find $root/lib/ -type f -name '*.lib.so' -printf '%f "%p"\n' \
| awk '{print ", "gensub(/\..*/, "", 1, $1)"={mapKey=\""$1"\",mapValue="$2"}"}'
echo -n '}'
fi
if [ -d "$root/tar" ]; then
echo -n ',tar = {'
find $root/tar/ -type f -name '*.tar' -printf '%f "%p"\n' \
| awk '{print ""gensub(/\..*/, "", 1, $1)"={mapKey=\""$1"\",mapValue="$2"}" }'
echo -n '}'
fi
echo '}'
echo -n '['
find $root/ -type f -printf ',{mapKey= "%f",mapValue="%p"}'
echo -n ']'
''

10
apps/hw-image/default.nix

@ -2,7 +2,7 @@
{ stdenv, nixpkgs, dhallApps, packages }:
let inherit (packages) base-hw-pc;
let inherit (packages) genodeSources base-hw-pc;
in nixpkgs.writeScriptBin "hw-image" (with nixpkgs.buildPackages;
let inherit (stdenv) cc;
@ -33,7 +33,7 @@ in nixpkgs.writeScriptBin "hw-image" (with nixpkgs.buildPackages;
# link final image
$LD \
--strip-all \
-T${base-hw-pc.src}/repos/base/src/ld/genode.ld \
-T${genodeSources}/repos/base/src/ld/genode.ld \
-z max-page-size=0x1000 \
-Ttext=$link_address -gc-sections \
"$lib" "$TMPDIR/boot_modules.o"
@ -43,7 +43,7 @@ in nixpkgs.writeScriptBin "hw-image" (with nixpkgs.buildPackages;
${dhallApps.dhall.program} text \
<<< "(env:DHALL_GENODE).Init.render ($@).config" \
| ${nixpkgs.buildPackages.libxml2}/bin/xmllint \
-schema ${packages.genode-sources}/repos/os/src/init/config.xsd - \
-schema ${packages.genodeSources}/repos/os/src/init/config.xsd - \
| sed 's/&gt;/>/g' \
> $TMPDIR/config
@ -51,8 +51,8 @@ in nixpkgs.writeScriptBin "hw-image" (with nixpkgs.buildPackages;
<<< "${../insert-config-rom.dhall} \"$TMPDIR/config\" ($@).rom" \
> "$TMPDIR/modules.dhall"
build_core "''${CORE_OBJ:-${base-hw-pc}/lib/core-hw-pc.o}" "$TMPDIR/modules.dhall" 0xffffffc000000000 > core.elf
build_core "''${BOOTSTRAP_OBJ:-${base-hw-pc}/lib/bootstrap-hw-pc.o}" "${
build_core "''${CORE_OBJ:-${base-hw-pc.coreObj}}" "$TMPDIR/modules.dhall" 0xffffffc000000000 > core.elf
build_core "''${BOOTSTRAP_OBJ:-${base-hw-pc.bootstrapObj}}" "${
../to-rom.dhall
} \"core.elf\" \"./core.elf\"" 0x00200000
'')

2
apps/linux-image/default.nix

@ -7,8 +7,6 @@ nixpkgs.writeScriptBin "linux-image" (with nixpkgs.buildPackages; ''
set -eu
export DHALL_PRELUDE=''${DHALL_PRELUDE:-${packages.dhallPrelude}/package.dhall}
export DHALL_GENODE=''${DHALL_GENODE:-${packages.dhallGenode}/package.dhall}
export BASE_LINUX_MANIFEST=''${BASE_LINUX_MANIFEST:-${packages.base-linux.manifest}}
export OS_MANIFEST=''${OS_MANIFEST:-${packages.os.manifest}}
${dhallApps.dhall.program} text <<< "${./script.dhall} ($@)" > boot.sh
source boot.sh
rm boot.sh

10
apps/nova-image/default.nix

@ -2,7 +2,7 @@
{ stdenv, nixpkgs, dhallApps, packages }:
let inherit (packages) base-nova;
let inherit (packages) genodeSources base-nova;
in nixpkgs.writeScriptBin "nova-image" (with nixpkgs.buildPackages;
let inherit (stdenv) cc;
@ -22,7 +22,7 @@ in nixpkgs.writeScriptBin "nova-image" (with nixpkgs.buildPackages;
${dhallApps.dhall.program} text \
<<< "(env:DHALL_GENODE).Init.render ($@).config" \
| ${nixpkgs.buildPackages.libxml2}/bin/xmllint \
-schema ${packages.genode-sources}/repos/os/src/init/config.xsd - \
-schema ${packages.genodeSources}/repos/os/src/init/config.xsd - \
| sed 's/&gt;/>/g' \
> $TMPDIR/config
@ -37,10 +37,10 @@ in nixpkgs.writeScriptBin "nova-image" (with nixpkgs.buildPackages;
# link final image
$LD --strip-all \
-T${base-nova.src}/repos/base/src/ld/genode.ld \
-T${base-nova.src}/repos/base-nova/src/core/core-bss.ld \
-T${genodeSources}/repos/base/src/ld/genode.ld \
-T${genodeSources}/repos/base-nova/src/core/core-bss.ld \
-z max-page-size=0x1000 \
-Ttext=0x100000 -gc-sections \
"''${CORE_OBJ:-${base-nova}/lib/core-nova.o}" "$TMPDIR/boot_modules.o"
"''${CORE_OBJ:-${base-nova.coreObj}}" "$TMPDIR/boot_modules.o"
cat a.out
'')

2
apps/render-init/default.nix

@ -11,7 +11,7 @@ nixpkgs.writeScriptBin "render-init" (with nixpkgs.buildPackages; ''
<<< "(env:DHALL_GENODE).Init.render ($(cat))" \
| ${nixpkgs.buildPackages.libxml2}/bin/xmllint \
-format \
-schema ${packages.genode-sources}/repos/os/src/init/config.xsd \
-schema ${packages.genodeSources}/repos/os/src/init/config.xsd \
- \
| sed 's/&gt;/>/g'
'')

2
compositions/pc-drivers.dhall

@ -69,7 +69,7 @@ let drivers =
"Report"
(Some label)
(Some label)
in [ routeReportToParent "acpi"
, routeReportToParent "pci_devices"
, routeReportToParent "usb_devices"

13
flake.lock

@ -55,18 +55,21 @@
},
"genode-depot": {
"info": {
"narHash": "sha256-7eL2MfGgeEaIwJXPc4LQ7pBa4JeGicm9th7onjKgzsE="
"lastModified": 1584019323,
"narHash": "sha256-/ZWsNeLI90r77T1GHABWjY5vtYFKDCUL+Io9ljfKgMA=",
"revCount": 8
},
"inputs": {
"nixpkgs": {
"info": {
"narHash": "sha256-OnpEWzNxF/AU4KlqBXM2s5PWvfI5/BS6xQrPvkF5tO8="
"lastModified": 1584015812,
"narHash": "sha256-oDj4g9nL3fp3xh0jAPZSHiucDxkLXA/rO3uM8L6kE0Y="
},
"inputs": {},
"locked": {
"owner": "edolstra",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "7f8d4b088e2df7fdb6b513bc2d6941f1d422a013",
"rev": "a3735dcbd7b2530ae3bcf73fd91e1ca6aa9449e7",
"type": "github"
},
"original": {
@ -77,7 +80,7 @@
},
"locked": {
"ref": "master",
"rev": "8c2aafed45b4075e37f1cd93de0ebf93f38c83c3",
"rev": "025906c2146d81fb890532c6e46dbfda4cb38ede",
"type": "git",
"url": "https://git.sr.ht/~ehmry/genode-depot"
},

10
flake.nix

@ -34,21 +34,11 @@
dhallApps = dhall-haskell.apps.${localSystem};
};
defaultPackage = with packages;
lib.mergeManifests [
base-hw-pc
base-nova
base-linux
os
sotest-producer
];
devShell = legacyPackages.mkShell {
nativeBuildInputs = [ dhall-haskell.packages.${localSystem}.dhall ];
shellHook = ''
export DHALL_PRELUDE="${packages.dhallPrelude}/package.dhall"
export DHALL_GENODE="${packages.dhallGenode}/package.dhall"
export MANIFEST="${defaultPackage}"
'';
};

127
packages/default.nix

@ -17,24 +17,40 @@ let
callPackage' = path: attrs:
addManifest (legacyPackages.callPackages path attrs);
buildUpstream = let f = import ./genodelabs { nixpkgs = legacyPackages; };
in args: addManifest (f args);
genodeLabs = import ./genodelabs {
nixpkgs = legacyPackages;
inherit addManifest;
};
inherit (genodeLabs) buildUpstream;
buildWorld = let
genodeWorld = legacyPackages.fetchFromGitHub {
owner = "genodelabs";
repo = "genode-world";
rev = "0ed545e55a90c39df23a86eb733961de71d56241";
hash = "sha256-sirmUtLmZ5YnfLKrOvOBafnZW3UW+1LtkiGu85Ma820=";
};
in attrs:
buildUpstream (attrs // {
postConfigure =
"echo REPOSITORIES += ${genodeWorld} >> build/etc/build.conf";
});
in rec {
inherit (legacyPackages) stdenv;
genode-sources = legacyPackages.callPackage ./genodelabs/sources.nix { };
inherit (genodeLabs) genodeSources;
base-hw-pc = buildUpstream {
name = "base-hw-pc";
outputs = [ "out" "coreObj" "bootstrapObj" ];
KERNEL = "hw";
BOARD = "pc";
targets = [ "bootstrap" "core" "timer" "lib/ld" ];
postInstall = ''
mkdir -p $out/lib
mv $out/bin/*.o $out/lib/
mv $out/lib/ld-hw.lib.so $out/lib/ld.lib.so
mv $out/core-hw-pc.o $coreObj
mv $out/bootstrap-hw-pc.o $bootstrapObj
mv $out/ld-hw.lib.so $out/ld.lib.so
mv $out/hw_timer_drv $out/timer_drv
'';
};
@ -44,103 +60,30 @@ in rec {
targets = [ "core" "timer" "lib/ld" ];
postInstall = ''
mkdir -p $out/lib
mv $out/lib/ld-linux.lib.so $out/lib/ld.lib.so
mv $out/ld-linux.lib.so $out/lib/ld.lib.so
mv $out/linux_timer_drv $out/timer_drv
'';
HOST_INC_DIR = legacyPackages.buildPackages.glibc.dev + "/include";
};
base-nova = buildUpstream {
name = "base-nova";
outputs = [ "out" "coreObj" ];
KERNEL = "nova";
targets = [ "core" "timer" "lib/ld" ];
postInstall = ''
mkdir -p $out/lib
mv $out/bin/*.o $out/lib/
mv $out/lib/ld-nova.lib.so $out/lib/ld.lib.so
mv $out/core-nova.o $coreObj
mv $out/ld-nova.lib.so $out/ld.lib.so
mv $out/nova_timer_drv $out/timer_drv
'';
};
driversPc = let directoryBlacklist = [ "repos/dde_zircon" ];
in buildUpstream {
name = "drivers";
BOARD = "pc";
targets = [ "drivers" ];
ports = [ "dde_bsd" "dde_ipxe" "dde_linux" "libc" "openssl" "x86emu" ];
preBuild = "find ${toString directoryBlacklist} -name target.mk -delete";
};
noux = buildUpstream {
name = "noux";
targets = [ "noux" "lib/libc_noux" ];
ports = [ "libc" ];
};
os = let
directoryBlacklist = [
"repos/dde_bsd"
"repos/dde_ipxe"
"repos/dde_linux"
"repos/dde_rump"
"repos/gems/src/app/mixer_gui_qt"
"repos/gems/src/server/http_block"
"repos/gems/src/server/terminal_mux"
"repos/libports"
"repos/ports"
];
in buildUpstream {
name = "os";
patches = [ ./genodelabs/capslock.patch ];
targets = [ "app" "init" "lib/vfs" "server" ];
ports = [ "jitterentropy" "libc" "libpng" "libssh" "openssl" "stb" "zlib" ];
preBuild = "find ${toString directoryBlacklist} -name target.mk -delete";
nativeBuildInputs = with legacyPackages.buildPackages; [ bison flex ];
};
vfs_lwip = buildUpstream {
name = "lwip";
targets = [ "lib/vfs/lwip" ];
ports = [ "lwip" ];
};
vfs_rump = buildUpstream {
name = "vfs_rump";
targets = [ "lib/vfs/rump" ];
ports = [ "dde_rump" ];
buildInputs = [ legacyPackages.buildPackages.zlib ];
};
vfs_ttf = buildUpstream {
name = "vfs_ttf";
targets = [ "lib/vfs/ttf" ];
ports = [ "libc" "stb" ];
};
virtualbox5 = buildUpstream {
name = "virtualbox5";
targets = [ "virtualbox5" ];
ports = [ "libc" "libiconv" "qemu-usb" "stdcxx" "virtualbox5" ];
nativeBuildInputs = with legacyPackages.buildPackages; [ iasl yasm ];
KERNEL = "nova";
};
init = genodeSources.make "init";
genodeTests = let
directoryBlacklist = [
"repos/base-*"
"repos/base/src/test/sanitizer"
"repos/base/src/test/xml_generator"
"repos/gems/src/test/aes_cbc_4k"
"repos/gems/src/test/decorator_stress"
"repos/gems/src/test/text_painter"
"repos/gems/src/test/text_painter"
"repos/gems/src/test/tiled_wm"
"repos/libports"
"repos/ports"
];
in buildUpstream {
name = "genode-tests";
preBuild = "find ${toString directoryBlacklist} -name target.mk -delete";
targets = [ "test" ];
ports = [ "libc" ];
ssh_client = buildWorld {
name = "ssh_client";
targets = [ "app/ssh_client" ];
portInputs = with genodeSources.ports; [ libc libssh openssl zlib ];
};
bender = legacyPackages.buildPackages.callPackage ./bender { };

21
packages/genodelabs/capslock.patch

@ -1,21 +0,0 @@
commit 6bc2bd3f4ac2c4e68d7d6dbee164a40b5a72638f
Author: Emery Hemingway <ehmry@posteo.net>
Date: Wed Feb 26 22:35:36 2020 +0100
Disable capslock/numlock requirements in driver_manager
The capslock and numlock state ROMs introduce senseless complexity.
diff --git a/repos/gems/src/app/driver_manager/main.cc b/repos/gems/src/app/driver_manager/main.cc
index 149911a717..afe62e8297 100644
--- a/repos/gems/src/app/driver_manager/main.cc
+++ b/repos/gems/src/app/driver_manager/main.cc
@@ -662,8 +662,6 @@ void Driver_manager::Main::_generate_usb_drv_config(Reporter &usb_drv_config,
xml.attribute("ehci", true);
xml.attribute("ohci", _use_ohci);
xml.attribute("xhci", true);
- xml.attribute("capslock_led", "rom");
- xml.attribute("numlock_led", "rom");
xml.node("hid", [&] () { });
xml.node("raw", [&] () {
xml.node("report", [&] () { xml.attribute("devices", true); });

303
packages/genodelabs/default.nix

@ -1,10 +1,37 @@
{ nixpkgs }:
{ nixpkgs, addManifest }:
let
inherit (nixpkgs.genodeHeaders) version src;
genodeSources = let
inherit (nixpkgs) stdenv;
platform = stdenv.targetPlatform;
arch = with platform;
if isx86_64 then
"x86_64"
else
throw "unknown Genode arch for platform ${platform.system}";
toolPrefix = if platform.isx86 then
"genode-x86-"
else
throw "unknown tool prefix for Genode arch ${arch}";
in stdenv.mkDerivation {
pname = "genode-sources";
inherit (nixpkgs.genodeHeaders) src version;
nativeBuildInputs = with nixpkgs.buildPackages; [ expect gnumake tcl ];
patches = [ ./init.xsd.patch ./svn-trust-server-cert.patch ];
configurePhase = ''
patchShebangs ./tool
substituteInPlace repos/base/etc/tools.conf \
--replace "/usr/local/genode/tool/19.05/bin/" ""
substituteInPlace tool/check_abi \
--replace "exec nm" "exec ${toolPrefix}nm"
'';
dontBuild = true;
installPhase = "cp -a . $out";
};
sourceForgeToolchain =
nixpkgs.buildPackages.callPackage ./toolchain.nix { };
sourceForgeToolchain = nixpkgs.buildPackages.callPackage ./toolchain.nix { };
stdenv' =
nixpkgs.stdenvAdapters.overrideCC nixpkgs.stdenv sourceForgeToolchain;
@ -17,192 +44,114 @@ let
else
throw "unknown Genode arch for platform ${platform.system}";
toolPrefix = if platform.isx86 then
"genode-x86-"
else
throw "unknown tool prefix for Genode arch ${arch}";
preparePort = name:
{ hash ? "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", ... }@args:
nixpkgs.buildPackages.stdenv.mkDerivation (args // {
outputHashMode = "recursive";
outputHash = hash;
pname = name;
inherit (genodeSources) version;
GIT_SSL_CAINFO =
"${nixpkgs.buildPackages.cacert}/etc/ssl/certs/ca-bundle.crt";
VERBOSE = "";
# need to build in verbose mode because errors are hidden
impureEnvVars = stdenv'.lib.fetchers.proxyImpureEnvVars
++ [ "GIT_PROXY_COMMAND" "SOCKS_SERVER" ];
dontUnpack = true;
dontConfigure = true;
nativeBuildInputs = with nixpkgs.buildPackages;
[ bison flex gitMinimal glibc glibcLocales rsync wget which ]
++ (args.nativeBuildInputs or [ ]);
buildPhase = ''
runHook preBuild
export CONTRIB_DIR=$NIX_BUILD_TOP/contrib
mkdir $CONTRIB_DIR
${genodeSources}/tool/ports/prepare_port $pname
runHook postBuild
'';
installPhase = ''
runHook preInstall
rsync $CONTRIB_DIR/* $out/ \
-lr --copy-unsafe-links \
--exclude '*.git' \
--exclude '*.svn' \
--exclude '*.gz' \
--exclude '*.xz' \
runHook postInstall
'';
});
ports =
nixpkgs.lib.mapAttrs preparePort (import ./ports.nix nixpkgs.buildPackages);
buildUpstream = { name, targets, portInputs ? [ ], nativeBuildInputs ? [ ]
, ... }@extraAttrs:
mkPort = { name, hash, nativeBuildInputs ? [ ] }:
let
value = stdenv'.mkDerivation {
drv = stdenv'.mkDerivation (extraAttrs // {
pname = name;
inherit src version;
inherit (genodeSources) version;
inherit targets;
outputHashMode = "recursive";
outputHash = hash;
dontUnpack = true;
nativeBuildInputs = with nixpkgs.buildPackages;
[ bison glibc flex gitMinimal subversion glibcLocales which wget ]
++ nativeBuildInputs;
[ binutils bison flex stdenv.cc tcl which ] ++ nativeBuildInputs;
patches = [ ./svn-trust-server-cert.patch ];
enableParallelBuilding = true;
configurePhase = ''
configurePhase = let
linkPorts = toString
(builtins.map (drv: " ln -sv ${drv}/* contrib/;") portInputs);
in ''
runHook preConfigure
patchShebangs ./tool/ports
export CONTRIB_DIR=$NIX_BUILD_TOP/contrib
export BUILD_DIR=$NIX_BUILD_TOP/build
${genodeSources}/tool/create_builddir ${arch}
substituteInPlace build/etc/build.conf \
--replace "#REPOSITORIES" "REPOSITORIES"
mkdir $CONTRIB_DIR; ${linkPorts}
runHook postConfigure
'';
buildPhase = ''
export CONTRIB_DIR=$out
./tool/ports/prepare_port $pname
makeFlags = [ "-C build" ] ++ targets;
installPhase = ''
runHook preInstall
find build/bin -name '*.xsd' -delete
find build/bin -follow -type f -exec install -Dt $out '{}' \;
runHook postInstall
'';
});
in addManifest drv;
buildOverrides = import ./targets.nix {
inherit (nixpkgs) buildPackages;
inherit ports;
};
dontInstall = true;
GIT_SSL_CAINFO =
"${nixpkgs.buildPackages.cacert}/etc/ssl/certs/ca-bundle.crt";
impureEnvVars = stdenv'.lib.fetchers.proxyImpureEnvVars
++ [ "GIT_PROXY_COMMAND" "SOCKS_SERVER" ];
};
in { inherit name value; };
portDrvs = with nixpkgs.buildPackages; builtins.listToAttrs (builtins.map mkPort [
{
name = "stb";
hash = "sha256-RQKF/H3wsKy6ZT9PLv4vzerJl+0Be2wqNjqsUBYZU6U=";
}
{
name = "libc";
hash = "sha256-yx5jGJI1w6KAwS2JPHhWpPFEeEyOv7yfIeXLRgQM7l8=";
}
{
name = "x86emu";
hash = "sha256-fKUab/HflrcZqzSk/cz/QimPtPILGwvXgHkwE4y2uQc=";
}
{
name = "lwip";
hash = "sha256-1oOJoCME8N1nQKUxG7vRBFRtJ9MausrIfno91QchMEU=";
}
{
name = "dde_linux";
hash = "sha256-9xD+pIjYeL9W/2HsOpJCGJs5+RgM2gmwxXC+h1Yc90Y=";
}
{
name = "dde_bsd";
hash = "sha256-ZcF6L4maC1vB5IP1jR6L4CWlaNf5Qu4xVjqITK3Yt0w=";
}
{
name = "dde_rump";
hash = "sha256-aU5s+sf9/bZxzSX7+9wNEn3693yxDJB/dNVWMLuJkQI=";
}
{
name = "dde_ipxe";
hash = "sha256-UIwC0O5IlxNWQKBJYE9h5ekVWP18UTvejsgb1i6KHCs=";
}
{
name = "openssl";
hash = "sha256-eZYdDT4L3R64mhUKGAiiQUOF9GgeEHDZlsDZbI4BM58=";
}
{
name = "libiconv";
hash = "sha256-TN3cZAo7zq7OLXXB2lLxOnM5c98aA0GksE7ACrymVvE=";
}
{
name = "qemu-usb";
hash = "sha256-awBouSz5MBBc9HuHZiZJK7jbabNSyqBQMX2NPXHvR0I=";
}
{
name = "stdcxx";
hash = "sha256-hXRdT6f2prKsCXDSJ4HMF1MNaRh0/EoNMrJUBuHQeyI=";
}
{
name = "virtualbox5";
hash = "sha256-VZPXyFLzLFCmxbbBqmZ9HP0y6E+1I+v/+Rt22IjlOrI=";
nativeBuildInputs = [
iasl
libxslt
unzip
yasm
];
}
{
name = "expat";
hash = "sha256-CCMxMn2DpzrIkW9WMBaX1T77T/GECy8pVlsT+BpbsQs=";
}
{
name = "jpeg";
hash = "sha256-ZUMuNV9ltGqZhny6LAn/Do1ojbypnSHa9dfQ0ZVZhUE=";
}
{
name = "lz4";
hash = "sha256-xYohPuOwqiFBHkqwP/q0fMafmWzMg4rt3qYZqO624wk=";
}
{
name = "mesa";
hash = "sha256-ho8t+7jFzYPi8nmHi4usFNunwHsbSBdtvVOtAlbz9Oc=";
nativeBuildInputs = [ python ];
}
{
name = "mupdf";
hash = "sha256-7zl2DKFIPzQdX/poF0jxejn81OCWrh7QfTuNmtOA4WA=";
}
{
name = "jitterentropy";
hash = "sha256-FnLuTDOCyQ9/jpQfx0vtyrbUymW7G3BuSM+NINKOxK4=";
}
{
name = "libpng";
hash = "sha256-Y3DjI7m1kYGbHX8hRob3RYnTTTX4LteOt5Yqzlcq/tQ=";
}
{
name = "libssh";
hash = "sha256-IjHv+cbvAU7RVcKJSvHJmG8ZDULpEAawr7snPzWdMsU=";
}
{
name = "zlib";
hash = "sha256-gWv8RKlc3TacC4sHPKXyhqVDRkM6MIXuWLqEx5gHz7s=";
}
]);
in { name, targets, ports ? [ ], nativeBuildInputs ? [ ], ... }@extraAttrs:
let ports' = builtins.map (name: builtins.getAttr name portDrvs) ports;
in stdenv'.mkDerivation (extraAttrs // {
pname = name;
inherit version targets;
src = nixpkgs.fetchFromGitHub {
owner = "genodelabs";
repo = "genode";
rev = version;
sha256 = "0idk92ibrasla0y2xkrmyh49dx0nzg96gqkcmn6r3w5r3fdpsfjy";
in {
inherit buildUpstream;
genodeSources = genodeSources // {
make = target:
with builtins;
let
attrs = if hasAttr target buildOverrides then
getAttr target buildOverrides
else
{ };
in buildUpstream ({
name = builtins.replaceStrings [ "/" ] [ "-" ] target;
targets = [ target ];
} // attrs);
inherit ports;
};
nativeBuildInputs = with nixpkgs.buildPackages;
[ binutils bison flex stdenv.cc tcl which ] ++ nativeBuildInputs;
enableParallelBuilding = true;
configurePhase = ''
runHook preConfigure
patchShebangs ./tool/check_abi
patchShebangs ./tool/create_builddir
substituteInPlace repos/base/etc/tools.conf \
--replace "/usr/local/genode/tool/19.05/bin/" ""
substituteInPlace tool/check_abi \
--replace "exec nm" "exec ${toolPrefix}nm"
./tool/create_builddir ${arch} BUILD_DIR=build
substituteInPlace build/etc/build.conf \
--replace "#REPOSITORIES" "REPOSITORIES"
runHook postConfigure
'' + (if ports != [ ] then
"mkdir contrib;"
+ toString (builtins.map (drv: " ln -sv ${drv}/* contrib/;") ports')
else
"");
makeFlags = [ "-C build" ] ++ targets;
installPhase = ''
runHook preInstall
find build/bin -name '*.xsd' -delete
find build/bin -name '*.lib.so' -exec install -Dt $out/lib '{}' \; -delete
find build/bin -exec install -Dt $out/bin '{}' \;
runHook postInstall
'';
passthru.ports = portDrvs;
})
}

40
packages/genodelabs/ports.nix

@ -0,0 +1,40 @@
# ports are superficially similar to Nix, but inferior in every way
nativePkgs:
with nativePkgs; {
dde_bsd.hash = "sha256-2ilZs6JkcQAvU/sQYnHunGtGRZDt7qLTpKZxQxSOf2I=";
dde_ipxe.hash = "sha256-KAmDF2t+xKzkEjWZ1bvLO8O+IlaV0ImuFsd8SIC3UQw=";
dde_linux.hash = "sha256-a1oaYF5S8OazyCOu/Jq+YOfrN4Kyb4JesLs222Vanjc=";
dde_rump = {
hash = "sha256-Wr5otGkWEa+5xImsFHQzwap5LckNEbyWA/7xbNcOreI=";
nativeBuildInputs = [ subversion ];
};
expat.hash = "sha256-m4Q/rIeBCe/nxCksipQTAOCNSl2KYF4nItswXmhdKyk=";
jitterentropy.hash = "sha256-6KS732GxtUMz0xPYKtshdn039DgdJq11vTDQesZn4Ds=";
jpeg.hash = "sha256-NyO72pMphX/QyPJl5CqX/gJbDhEIwCYbXf18HQBaFEI=";
libc = {
hash = "sha256-xAydMqf2+OTNt7nMUk0KTTil7sIIWGvn0Ytmepkc3rI=";
nativeBuildInputs = [ buildPackages.gcc subversion ];
};
libiconv.hash = "sha256-3PWJJg0rQTa789Jb5RnuHN0nfBKFnd0g+J7Vk7uXn5c=";
libpng.hash = "sha256-bAUkafClnl+BDv0X2xs1iY4rlHVHkGxnb7UfPkCSeds=";
libssh.hash = "sha256-Z/1YdhISh2kqBjWiTOLkS+usoeeekJvAuYrVUgpxnQM=";
lighttpd.hash = "sha256-aBClCnOfbPSgisCTHquNhXAzkeslFp0ckK/lazr9AoE=";
lwip.hash = "sha256-V0Lo4DcY/Ai60kQmYB92BVlNX+QRLsymM5unXAvP0VI=";
lz4.hash = "sha256-Ndpv4NmZTeB737l2ywLrnXoqKzyCaBFMZl7ULfr14lY=";
mesa = {
hash = "sha256-vkVbWFKO9OXOb8sEhkCL9x4gxxXjRhM41WXsB7YL/4Q=";
nativeBuildInputs = [ python ];
};
mupdf.hash = "sha256-AQwnVdHHWmqnHKvG3+I9zXUoC5IHD0MtS5mRh9u/V+o=";
openssl.hash = "sha256-VMMzzaSw17SMETAYwGYNgMDPPgDpMjgrPnhMV8/Pn8o=";
qemu-usb.hash = "sha256-PilJvNrJfz4iHj//mmARN47SVcA6+PTey/auTuQcs88=";
stb.hash = "sha256-9LSH1i8jcEvjRAmTvgtK+Axy9hO7uiSzmSgBvs0zkTc=";
stdcxx.hash = "sha256-Pec6B3ziRDRGFia0/XyeA3fo6fyevC0LynKU4xa8weI=";
virtualbox5 = {
hash = "sha256-UEJTSD+jWc1arZ4ODqbfzM092UMZDiQlkbysxBdFE9w=";
nativeBuildInputs = [ iasl libxslt unzip yasm ];
};
x86emu.hash = "sha256-Q/fOQjbU0Frtkj+f2rSKuYRSEIk4s569qf3UaTbElLY=";
zlib.hash = "sha256-bxTalPJBSs5yEMO2gFKvoR1PadepmkFGt6jcSZN/fgE=";
}

10
packages/genodelabs/sources.nix

@ -1,10 +0,0 @@
{ stdenv, genodeHeaders }:
stdenv.mkDerivation {
pname = "genode-sources";
inherit (genodeHeaders) version src;
patches = [ ./init.xsd.patch ./svn-trust-server-cert.patch ];
dontConfigure = true;
dontBuild = true;
installPhase = "cp -a . $out";
}

38
packages/genodelabs/targets.nix

@ -0,0 +1,38 @@
{ buildPackages, ports }:
with ports;
{
"app/lighttpd".portInputs = [ libc lighttpd openssl zlib ];
"drivers/framebuffer/intel" = {
BOARD = "pc";
portInputs = [ dde_linux ];
};
"drivers/framebuffer/vesa" = {
BOARD = "pc";
portInputs = [ x86emu ];
};
"drivers/usb".portInputs = [ dde_linux ];
"lib/vfs/lwip".portInputs = [ lwip ];
"lib/vfs/ttf".portInputs = [ libc stb ];
"lib/vfs/rump" = {
portInputs = [ dde_rump ];
buildInputs = [ buildPackages.zlib ];
};
noux = {
targets = [ "noux" "lib/libc_noux" ];
portInputs = [ libc ];
};
virtualbox5 = {
KERNEL = "nova";
portInputs = [ libc libiconv qemu-usb stdcxx virtualbox5 ];
nativeBuildInputs = with buildPackages; [ iasl yasm ];
};
}

38
tests/driver-hw-config.dhall

@ -1,38 +0,0 @@
-- SPDX-License-Identifier: CC0-1.0
let Genode = env:DHALL_GENODE
let Init = Genode.Init
let Child = Init.Child
let wrapHarness
: Init.Type → Child.Type
= env:DHALL_WRAP_HARNESS ? ./sotest-wrapper.dhall
in λ(boot : Genode.Boot.Type)
→ { config =
Init::{
, children =
[ { mapKey = "timer"
, mapValue =
Child.flat
Child.Attributes::{
, binary = "hw_timer_drv"
, provides = [ "Timer" ]
}
}
, { mapKey = "harness", mapValue = wrapHarness boot.config }
]
}
, rom =
let manifest = env:MANIFEST
in Genode.Boot.toRomPaths
[ manifest.base-hw-pc.bin.hw_timer_drv
, manifest.base-hw-pc.lib.ld
, manifest.os.bin.init
, manifest.sotest-producer.bin.sotest-harness
]
# boot.rom
}

17
tests/driver-hw.nix

@ -34,20 +34,19 @@ let
'';
};
defaultScript = ''run_genode_until {[init] child "harness" exited with exit value 0} 60'';
defaultScript =
''run_genode_until {[init] child "harness" exited with exit value 0} 60'';
mkTest = { name ? "unamed", testScript ? defaultScript, testConfig, testInputs ? [ ]
, testEnv ? { }, qemuArgs ? [], ...
}@t:
mkTest = { name ? "unamed", testScript ? defaultScript, testConfig
, testInputs ? [ ], testEnv ? { }, qemuArgs ? [ ], ... }@t:
let
testConfig' = "${./driver-hw-config.dhall} ${testConfig}";
manifest = lib.mergeManifests (with testPkgs;
[ base-hw-pc os sotest-producer ]
[ base-hw-pc (genodeSources.make "init") sotest-producer ]
++ testInputs);
testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})";
testEnv' = {
DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall";
DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall;
MANIFEST = manifest;
XDG_CACHE_HOME = "/tmp";
} // testEnv;
@ -142,8 +141,8 @@ let
iso = apps.hw-iso.function testEnv' testConfig';
xml = hostPkgs.runCommand (name + ".config") testEnv' ''
${apps.render-init.program} <<< "(${testConfig'}).config" > $out'';
xml = hostPkgs.runCommand (name + ".config") testEnv'
''${apps.render-init.program} <<< "(${testConfig'}).config" > $out'';
sotest = hostPkgs.runCommand "hw-${name}-sotest" testEnv' ''
cp "${testPkgs.bender}" bender

41
tests/driver-linux-config.dhall

@ -1,41 +0,0 @@
-- SPDX-License-Identifier: CC0-1.0
let Genode = env:DHALL_GENODE
let Init = Genode.Init
let Child = Init.Child
let wrapHarness
: Init.Type → Child.Type
= env:DHALL_WRAP_HARNESS ? ./sotest-wrapper.dhall
let Child = Genode.Init.Child
in λ(boot : Genode.Boot.Type)
→ { config =
Genode.Init::{
, children =
[ { mapKey = "timer"
, mapValue =
Child.flat
Child.Attributes::{
, binary = "linux_timer_drv"
, provides = [ "Timer" ]
}
}
, { mapKey = "harness", mapValue = wrapHarness boot.config }
]
}
, rom =
let manifest = env:MANIFEST
in Genode.BootModules.toRomPaths
[ manifest.base-linux.bin.core-linux
, manifest.base-linux.bin.linux_timer_drv
, manifest.base-linux.lib.ld
, manifest.os.bin.init
, manifest.sotest-producer.bin.sotest-harness
]
# boot.rom
: Genode.BootModules.Type
}

8
tests/driver-linux.nix

@ -38,13 +38,13 @@ let
, env ? { }, ... }:
with testPkgs;
let
testConfig' = "${./driver-linux-config.dhall} ${testConfig}";
manifest = lib.mergeManifests
(with testPkgs; [ base-linux init sotest-producer ] ++ testInputs);
testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})";
env' = {
DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall";
DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall;
MANIFEST = lib.mergeManifests (with testPkgs;
[ base-linux os sotest-producer ] ++ testInputs);
MANIFEST = manifest;
XDG_CACHE_HOME = "/tmp";
} // env;

38
tests/driver-nova-config.dhall

@ -1,38 +0,0 @@
-- SPDX-License-Identifier: CC0-1.0
let Genode = env:DHALL_GENODE
let Init = Genode.Init
let Child = Init.Child
let wrapHarness
: Init.Type → Child.Type
= env:DHALL_WRAP_HARNESS ? ./sotest-wrapper.dhall
in λ(boot : Genode.Boot.Type)
→ { config =
Init::{
, children =
[ { mapKey = "timer"
, mapValue =
Child.flat
Child.Attributes::{
, binary = "nova_timer_drv"
, provides = [ "Timer" ]
}
}
, { mapKey = "harness", mapValue = wrapHarness boot.config }
]
}
, rom =
let manifest = env:MANIFEST
in Genode.Boot.toRomPaths
[ manifest.base-nova.lib.ld
, manifest.base-nova.bin.nova_timer_drv
, manifest.os.bin.init
, manifest.sotest-producer.bin.sotest-harness
]
# boot.rom
}

17
tests/driver-nova.nix

@ -34,20 +34,19 @@ let
'';
};
defaultScript = ''run_genode_until {[init] child "harness" exited with exit value 0} 60'';
defaultScript =
''run_genode_until {[init] child "harness" exited with exit value 0} 60'';
mkTest = { name ? "unamed", testScript ? defaultScript, testConfig, testInputs ? [ ]
, testEnv ? { }, qemuArgs ? [], ...
}@t:
mkTest = { name ? "unamed", testScript ? defaultScript, testConfig
, testInputs ? [ ], testEnv ? { }, qemuArgs ? [ ], ... }@t:
let
testConfig' = "${./driver-nova-config.dhall} ${testConfig}";
manifest = lib.mergeManifests (with testPkgs;
[ base-nova os sotest-producer ]
[ base-nova (genodeSources.make "init") sotest-producer ]
++ testInputs);
testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})";
testEnv' = {
DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall";
DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall;
MANIFEST = manifest;
XDG_CACHE_HOME = "/tmp";
} // testEnv;
@ -143,8 +142,8 @@ let
iso = apps.nova-iso.function testEnv' "${testConfig'}";
xml = hostPkgs.runCommand (name + ".config") testEnv' ''
${apps.render-init.program} <<< "(${testConfig'}).config" > $out'';
xml = hostPkgs.runCommand (name + ".config") testEnv'
''${apps.render-init.program} <<< "(${testConfig'}).config" > $out'';
sotest = hostPkgs.runCommand "nova-${name}-sotest" testEnv' ''
cp "${testPkgs.bender}" bender

193
tests/driver_manager.dhall

@ -22,77 +22,136 @@ let childRomRoute =
→ λ(from : Text)
→ ServiceRoute.childLabel "ROM" child (Some from) (None Text)
let label = \(_ : Text) -> { local = _, route = _ }
let label = λ(_ : Text) → { local = _, route = _ }
in Init::{
, verbose = True
, children =
toMap
{ , drivers =
Init.toChild
drivers
Init.Attributes::{
, provides = [ "Block", "Framebuffer", "Input" ]
, resources = Init.Resources::{ ram = Genode.units.MiB 4 }
, romReports = [ label "block_devices" ]
, routes =
[ parentRomRoute
"managed/input_filter"
"input_filter.config"
, parentRomRoute " numlock_remap" "numlock_remap.config"
, childRomRoute "dynamic_rom" "capslock"
, childRomRoute "dynamic_rom" "numlock"
, childRomRoute "dynamic_rom" "system"
, ServiceRoute.child "Report" "_report_rom"
, ServiceRoute.parent "Timer"
, Genode.Init.ServiceRoute.parent "IRQ"
, Genode.Init.ServiceRoute.parent "IO_MEM"
, Genode.Init.ServiceRoute.parent "IO_PORT"
]
}
, dynamic_rom =
Child.flat
Child.Attributes::{
, binary = "dynamic_rom"
, resources = Resources::{ ram = Genode.units.MiB 4 }
, provides = [ "ROM" ]
, config =
Genode.Init.Config::{
, content =
[ Genode.Prelude.XML.text
''
<rom name="system">
<inline>
<system state=""/>
</inline>
<sleep milliseconds="10000"/>
</rom>
''
in Genode.Boot::{
, config =
Init::{
, verbose = True
, children =
toMap
{ drivers =
Init.toChild
drivers
Init.Attributes::{
, provides = [ "Block", "Framebuffer", "Input" ]
, resources = Init.Resources::{ ram = Genode.units.MiB 4 }
, romReports = [ label "block_devices" ]
, routes =
[ parentRomRoute
"managed/input_filter"
"input_filter.config"
, parentRomRoute " numlock_remap" "numlock_remap.config"
, childRomRoute "dynamic_rom" "capslock"
, childRomRoute "dynamic_rom" "numlock"
, childRomRoute "dynamic_rom" "system"
, ServiceRoute.child "Report" "_report_rom"
, ServiceRoute.parent "Timer"
, Genode.Init.ServiceRoute.parent "IRQ"
, Genode.Init.ServiceRoute.parent "IO_MEM"
, Genode.Init.ServiceRoute.parent "IO_PORT"
]
}
}
, test-driver_manager =
Child.flat
Child.Attributes::{
, binary = "test-driver_manager"
, config =
Init.Config::{
, content =
[ Genode.Prelude.XML.text
''
<check_ahci_block_device label="ahci-1" block_count="65536" block_size="512" model="QEMU HARDDISK"/>
<check_input/>
<check_framebuffer/>
''
, dynamic_rom =
Child.flat
Child.Attributes::{
, binary = "dynamic_rom"
, resources = Resources::{ ram = Genode.units.MiB 4 }
, provides = [ "ROM" ]
, config =
Genode.Init.Config::{
, content =
[ Genode.Prelude.XML.text
''
<rom name="system">
<inline>
<system state=""/>
</inline>
<sleep milliseconds="10000"/>
</rom>
''
]
}
}
, test-driver_manager =
Child.flat
Child.Attributes::{
, binary = "test-driver_manager"
, config =
Init.Config::{
, content =
[ Genode.Prelude.XML.text
''
<check_ahci_block_device label="ahci-1" block_count="65536" block_size="512" model="QEMU HARDDISK"/>
<check_input/>
<check_framebuffer/>
''
]
}
, reportRoms = [ label "block_devices" ]
, routes =
[ ServiceRoute.child "Block" "drivers"
, ServiceRoute.child "Framebuffer" "drivers"
, ServiceRoute.child "Input" "drivers"
]
}
, reportRoms = [ label "block_devices" ]
, routes =
[
, ServiceRoute.child "Block" "drivers"
, ServiceRoute.child "Framebuffer" "drivers"
, ServiceRoute.child "Input" "drivers"
]
}
}
, rom =
Genode.Boot.toRomTexts
( toMap
{ capslock = "<feature_creep/>"
, numlock = "<feature_creep/>"
, usb_policy = "<usb/>"
}
# [ { mapKey =
"fb_drv.config"
, mapValue =
''
<config width="1024" height="768" buffered="yes"/>
<report connectors="yes"/>
</config>
''
}
, { mapKey =
"input_filter.config"
, mapValue =
''
<config>
<input label="ps2"/>
<input label="usb"/>
<output>
<chargen>
<remap>
<key name="KEY_F11" to="KEY_RESTART"/>
<key name="KEY_F12" to="KEY_DASHBOARD"/>
<key name="KEY_LEFTMETA" to="KEY_SCREEN"/>
<merge>
<accelerate max="50" sensitivity_percent="1000" curve="127">
<button-scroll>
<input name="ps2"/>
<vertical button="BTN_MIDDLE" speed_percent="-10"/>
<horizontal button="BTN_MIDDLE" speed_percent="-10"/>
</button-scroll>
</accelerate>
<input name="usb"/>
</merge>
</remap>
<mod1>
<key name="KEY_LEFTSHIFT"/> <key name="KEY_RIGHTSHIFT"/>
</mod1>
<mod2>
<key name="KEY_LEFTCTRL"/> <key name="KEY_RIGHTCTRL"/>
</mod2>
<mod3>
<key name="KEY_RIGHTALT"/> <!-- AltGr -->
</mod3>
<repeat delay_ms="230" rate_ms="40"/>
</chargen>
</output>
</config>
''
}
}
]
)
}

34
tests/driver_manager.nix

@ -7,21 +7,33 @@ testEnv.mkTest {
name = "driver_manager";
meta.maintainers = with pkgs.stdenv.lib.maintainers; [ ehmry ];
testEnv = { drivers = ./../compositions/pc-drivers.dhall; };
testInputs = (with pkgs; [ genodeTests driversPc ]) ++ (with depot; [
boot_fb_drv
intel_fb_drv
usb_drv
vesa_drv
testInputs = (map pkgs.genodeSources.make [
"app/driver_manager"
"app/rom_reporter"
"drivers/acpi"
"drivers/ahci"
"drivers/framebuffer/boot"
"drivers/framebuffer/intel"
"drivers/framebuffer/vesa"
"drivers/input/spec/ps2"
"drivers/platform"
"drivers/rtc"
"drivers/usb"
"server/dynamic_rom"
"server/input_filter"
"server/report_rom"
"test/driver_manager"
]);
testScript = ''
catch { exec dd if=/dev/zero of=hdd_disk.raw bs=1M count=32 }
catch { exec ${hostPkgs.e2fsprogs}/bin/mke2fs -F bin/hdd_disk.raw }
run_genode_until {.*all expected devices present and accessible.*} 120
'';
testConfig = ''
{ config = ${./driver_manager.dhall}
, rom = ${./driver_manager.rom.dhall}
}
'';
qemuArgs = [ "-device ahci,id=ahci" "-drive id=hdd,file=hdd_disk.raw,format=raw,if=none" "-device ide-hd,drive=hdd,bus=ahci.1"];
testConfig = ./driver_manager.dhall;
qemuArgs = [
"-device ahci,id=ahci"
"-drive id=hdd,file=hdd_disk.raw,format=raw,if=none"
"-device ide-hd,drive=hdd,bus=ahci.1"
];
}

73
tests/driver_manager.rom.dhall

@ -1,73 +0,0 @@
let Genode = env:DHALL_GENODE
let manifest = env:MANIFEST
in Genode.Boot.toRomPaths
[
, manifest.drivers.bin.acpi_drv
, manifest.drivers.bin.ahci_drv
, manifest.drivers.bin.platform_drv
, manifest.drivers.bin.ps2_drv
, manifest.drivers.bin.rtc_drv
, manifest.drivers.bin.usb_drv
, manifest.drivers.bin.vesa_fb_drv
, manifest.genode-tests.bin.test-driver_manager
, manifest.os.bin.driver_manager
, manifest.os.bin.dynamic_rom
, manifest.os.bin.input_filter
, manifest.os.bin.report_rom
, manifest.os.bin.rom_reporter
]
# Genode.Boot.toRomTexts
( toMap
{ usb_policy = "<usb/>" }
# [ { mapKey =
"fb_drv.config"
, mapValue =
''
<config width="1024" height="768" buffered="yes"/>
<report connectors="yes"/>
</config>
''
}
, { mapKey =
"input_filter.config"
, mapValue =
''
<config>
<input label="ps2"/>
<input label="usb"/>
<output>
<chargen>
<remap>
<key name="KEY_F11" to="KEY_RESTART"/>
<key name="KEY_F12" to="KEY_DASHBOARD"/>
<key name="KEY_LEFTMETA" to="KEY_SCREEN"/>
<merge>