2
0
Fork 0

Add NOVA driver_manager test

20.02
Emery Hemingway 3 years ago
parent 629e6930c7
commit 52fe694be4
  1. 284
      compositions/pc-drivers.dhall
  2. 8
      packages/default.nix
  3. 21
      packages/genodelabs/capslock.patch
  4. 4
      tests/default.nix
  5. 4
      tests/driver-hw-config.dhall
  6. 110
      tests/driver_manager.dhall
  7. 27
      tests/driver_manager.nix
  8. 72
      tests/driver_manager.rom.dhall

@ -0,0 +1,284 @@
-- SPDX-License-Identifier: CC0-1.0
let Genode = env:DHALL_GENODE
let Prelude = Genode.Prelude
let XML = Prelude.XML
let Init = Genode.Init
let Child = Init.Child
let Resources = Init.Resources
let ServiceRoute = Init.ServiceRoute
let reportRomRoute =
λ(service : Text)
→ λ(label : Text)
→ ServiceRoute.childLabel service "report_rom" (Some label) (None Text)
let reportRomReport = reportRomRoute "Report"
let reportRomROM = reportRomRoute "ROM"
let drivers =
Init::{
, services =
[ ServiceRoute.child "Framebuffer" "dynamic"
, ServiceRoute.child "Block" "dynamic"
, ServiceRoute.child "Usb" "usb_drv"
, ServiceRoute.child "Platform" "platform_drv"
, ServiceRoute.child "Input" "input_filter"
, ServiceRoute.child "Rtc" "rtc"
]
, children =
toMap
{ rtc =
Child.flat
Child.Attributes::{
, binary = "rtc_drv"
, provides = [ "Rtc" ]
, routes =
[ ServiceRoute.parent "IO_PORT"
, ServiceRoute.parent "IO_MEM"
]
}
, report_rom =
Child.flat
Child.Attributes::{
, binary = "report_rom"
, resources = Resources::{ ram = Genode.units.MiB 2 }
, provides = [ "ROM", "Report" ]
, config =
Init.Config::{
, content =
[ XML.text
''
<policy label="platform_drv -> acpi" report="acpi_drv -> acpi"/>
<policy label="driver_manager -> pci_devices" report="platform_drv -> pci"/>
<policy label="usb_drv -> config" report="driver_manager -> usb_drv.config"/>
<policy label="driver_manager -> usb_devices" report="usb_drv -> devices"/>
<policy label="dynamic -> config" report="driver_manager -> init.config"/>
<policy label="driver_manager -> ahci_ports" report="dynamic -> ahci_ports"/>
<policy label="driver_manager -> nvme_ns" report="dynamic -> nvme_ns"/>
<policy label="rom_reporter -> acpi" report="acpi_drv -> acpi"/>
<policy label="rom_reporter -> pci_devices" report="platform_drv -> pci"/>
<policy label="rom_reporter -> usb_devices" report="usb_drv -> devices"/>
''
]
}
}
, rom_reporter =
Child.flat
Child.Attributes::{
, binary = "rom_reporter"
, config =
Init.Config::{
, content =
[ XML.text
''
<rom label="acpi"/>
<rom label="pci_devices"/>
<rom label="usb_devices"/>
''
]
}
, routes =
let routeReportToParent =
λ(label : Text)
→ ServiceRoute.parentLabel
"Report"
(Some label)
(Some label)
in [ reportRomROM "acpi"
, reportRomROM "pci_devices"
, reportRomROM "usb_devices"
, routeReportToParent "acpi"
, routeReportToParent "pci_devices"
, routeReportToParent "usb_devices"
]
}
, acpi_drv =
Child.flat
Child.Attributes::{
, binary = "acpi_drv"
, priority = 1
, resources =
Resources::{ caps = 350, ram = Genode.units.MiB 4 }
, routes =
[ ServiceRoute.parent "IO_MEM"
, reportRomReport "acpi"
, ServiceRoute.parentLabel
"Report"
(Some "smbios_table")
(Some "smbios_table")
]
}
, platform_drv =
Child.flat
Child.Attributes::{
, binary = "platform_drv"
, resources =
Resources::{
, caps = 400
, ram = Genode.units.MiB 4
, constrainPhys = True
}
, provides = [ "Acpi", "Platform" ]
, routes =
[ ServiceRoute.parent "IRQ"
, ServiceRoute.parent "IO_MEM"
, ServiceRoute.parent "IO_PORT"
, ServiceRoute.parent "Timer"
, ServiceRoute.parentLabel
"ROM"
(Some "system")
(Some "system")
, reportRomROM "acpi"
, reportRomReport "pci"
]
, config =
Init.Config::{
, attributes = toMap { system = "yes" }
, content =
[ XML.text
''
<report pci="yes"/>
<policy label_prefix="ps2_drv">
<device name="PS2"/>
</policy>
<policy label_prefix="dynamic -> vesa_fb_drv">
<pci class="VGA"/>
</policy>
<policy label_prefix="dynamic -> ahci_drv">
<pci class="AHCI"/>
</policy>
<policy label_prefix="dynamic -> nvme_drv">
<pci class="NVME"/>
</policy>
<policy label_prefix="usb_drv">
<pci class="USB"/>
</policy>
<policy label_prefix="dynamic -> intel_fb_drv">
<pci class="VGA"/>
<pci bus="0" device="0" function="0"/>
<pci class="ISABRIDGE"/>
</policy>
<policy label_suffix="-> wifi">
<pci class="WIFI"/>
</policy>
<policy label_suffix="-> nic">
<pci class="ETHERNET"/>
</policy>
<policy label_suffix="-> audio">
<pci class="AUDIO"/>
<pci class="HDAUDIO"/>
</policy>
<policy label="acpica"/>
''
]
}
}
, usb_drv =
Child.flat
Child.Attributes::{
, binary = "usb_drv"
, priority = 1
, resources =
Resources::{ caps = 200, ram = Genode.units.MiB 16 }
, provides = [ "Input", "Usb" ]
, routes =
[ ServiceRoute.child "Platform" "platform_drv"
, reportRomROM "config"
, reportRomReport "devices"
, ServiceRoute.parentLabel
"Report"
(Some "config")
(Some "usb_active_config")
, ServiceRoute.parent "Timer"
]
}
, ps2_drv =
Child.flat
Child.Attributes::{
, binary = "ps2_drv"
, provides = [ "Input" ]
, routes =
[ ServiceRoute.child "Platform" "platform_drv"
, ServiceRoute.parent "Timer"
]
}
, input_filter =
Child.flat
Child.Attributes::{
, binary = "input_filter"
, priority = 1
, resources = Resources::{ ram = Genode.units.MiB 2 }
, provides = [ "Input" ]
, routes =
[ ServiceRoute.parent "Timer"
, ServiceRoute.parentLabel
"ROM"
(Some "config")
(Some "input_filter.config")
, ServiceRoute.childLabel
"Input"
"ps2_drv"
(Some "ps2")
(None Text)
, ServiceRoute.childLabel
"Input"
"usb_drv"
(Some "usb")
(None Text)
]
}
, driver_manager =
Child.flat
Child.Attributes::{
, binary = "driver_manager"
, priority = 1
, routes =
[ reportRomReport "init.config"
, reportRomReport "usb_drv.config"
, ServiceRoute.parentLabel
"Report"
(Some "block_devices")
(Some "block_devices")
, reportRomROM "usb_devices"
, reportRomROM "pci_devices"
, reportRomROM "ahci_ports"
, reportRomROM "nvme_ns"
, ServiceRoute.parentLabel
"ROM"
(Some "usb_policy")
(Some "usb_policy")
]
}
, dynamic =
Child.flat
Child.Attributes::{
, binary = "init"
, priority = 1
, resources =
Resources::{ caps = 1400, ram = Genode.units.MiB 64 }
, provides = [ "Framebuffer", "Block" ]
, routes =
[ ServiceRoute.child "Platform" "platform_drv"
, reportRomReport "ahci_ports"
, reportRomReport "nvme_ns"
, ServiceRoute.child "Usb" "usb_drv"
, reportRomROM "config"
, ServiceRoute.parent "Timer"
, ServiceRoute.parent "Report"
, ServiceRoute.parent "IO_MEM"
, ServiceRoute.parent "IO_PORT"
]
}
}
}
in drivers

@ -51,6 +51,14 @@ in rec {
'';
};
driver_manager = buildUpstream {
name = "driver_manager";
arch = "x86_64";
targets = [ "app/driver_manager" ];
patches = [ ./genodelabs/capslock.patch ];
};
genodeTests = let
directoryBlacklist = [
"repos/base-*"

@ -0,0 +1,21 @@
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); });

@ -21,6 +21,7 @@ let
nova = (call:
((tests call) // {
driver_manager = call ./driver_manager.nix { };
# noux = call ./noux.nix { };
pci = call ./pci.nix { };
rtc = call ./rtc.nix { };
@ -54,4 +55,5 @@ let
}) (testsToList nova);
in with builtins;
listToAttrs ((concatLists (map (testsToList) [ linux nova hw ])) ++ hw-sotest ++ nova-sotest)
listToAttrs ((concatLists (map (testsToList) [ linux nova hw ])) ++ hw-sotest
++ nova-sotest)

@ -29,8 +29,8 @@ in λ(boot : Genode.Boot.Type)
let manifest = env:MANIFEST
in Genode.Boot.toRomPaths
[ manifest.base-hw-pc.lib.ld
, manifest.base-hw-pc.bin.hw_timer_drv
[ manifest.base-hw-pc.bin.hw_timer_drv
, manifest.base-hw-pc.lib.ld
, manifest.os.bin.init
, manifest.sotest-producer.bin.sotest-harness
]

@ -0,0 +1,110 @@
-- SPDX-License-Identifier: CC0-1.0
let drivers = env:drivers ? ../compositions/pc-drivers.dhall
let Genode = env:DHALL_GENODE
let Init = Genode.Init
let Child = Init.Child
let Resources = Init.Resources
let ServiceRoute = Init.ServiceRoute
let parentRomRoute =
λ(from : Text)
→ λ(to : Text)
→ ServiceRoute.parentLabel "ROM" (Some from) (Some to)
let childRomRoute =
λ(child : Text)
→ λ(from : Text)
→ ServiceRoute.childLabel "ROM" child (Some from) (None Text)
in Init::{
, verbose = True
, children =
toMap
{ report_rom =
Child.flat
Child.Attributes::{
, binary = "report_rom"
, provides = [ "ROM", "Report" ]
, config =
Init.Config::{
, attributes = toMap { verbose = "yes" }
, content =
[ Genode.Prelude.XML.text
''
<policy label="test-driver_manager -> block_devices" report="drivers -> block_devices"/>
''
]
}
}
, drivers =
Init.toChild
drivers
Init.Attributes::{
, provides = [ "Block", "Framebuffer", "Input" ]
, resources = Init.Resources::{ ram = Genode.units.MiB 4 }
, 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>
''
]
}
}
, 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/>
''
]
}
, routes =
[ childRomRoute "report_rom" "block_devices"
, ServiceRoute.child "Block" "drivers"
, ServiceRoute.child "Framebuffer" "drivers"
, ServiceRoute.child "Input" "drivers"
]
}
}
}

@ -0,0 +1,27 @@
# SPDX-License-Identifier: CC0-1.0
{ testEnv, pkgs, depot, hostPkgs, ... }:
with pkgs;
testEnv.mkTest {
name = "driver_manager";
meta.maintainers = with pkgs.stdenv.lib.maintainers; [ ehmry ];
testEnv = { drivers = ./../compositions/pc-drivers.dhall; };
testInputs = (with pkgs; [ genodeTests driver_manager ]) ++ (with depot; [
boot_fb_drv
intel_fb_drv
usb_drv
vesa_drv
]);
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"];
}

@ -0,0 +1,72 @@
let Genode = env:DHALL_GENODE
let manifest = env:MANIFEST
in Genode.Boot.toRomPaths
[ manifest.driver_manager.bin.driver_manager
, manifest.genode-tests.bin.test-driver_manager
, manifest.os.bin.acpi_drv
, manifest.os.bin.ahci_drv
, manifest.os.bin.dynamic_rom
, manifest.os.bin.input_filter
, manifest.os.bin.platform_drv
, manifest.os.bin.ps2_drv
, manifest.os.bin.report_rom
, manifest.os.bin.rom_reporter
, manifest.os.bin.rtc_drv
, manifest.usb_drv.bin.usb_drv
, manifest.vesa_drv.bin.vesa_fb_drv
]
# 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>
<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>
''
}
]
)
Loading…
Cancel
Save