Closed jklmnn closed 5 years ago
Booting an image on a vm does not seem to be easy. Using bender sticks in a boot loop.
The CPU settings seems to be required to have only one socket and multiple cores. Botting with more sockets causes NOVA to hang after the first message.
While NOVA still fails to boot, using sel4 the framebuffer test is working.
The boot should happen from https://github.com/jklmnn/genode/tree/netcup.
https://github.com/jklmnn/genode-trabant/commit/bf46c7124d014e9716430c9a4c6d02687785db58 brings up nitpicker but the log test still fails to log something. This might be a problem with the terminal_log or the logtest itself. The terminal seems to come up correctly since its black window shows up.
I have added nitpicker to the test to have more options. I added two nit_bs components, one with the terminal_log and one with a test-framebuffer. As long as I only add the terminal_log and the test-framebuffer, it seems to work. The framebuffer changes its color and the pointer comes up. But as soon as I use the log session of the terminal_log with any other component (independent of the nitpicker ofc) everything seems to hang. The framebuffer stops its color changing and the pointer doesnt even show up.
It seems that as soon as the terminal session is used (terminal.write is called) something locks up. There are three solutions now:
With the VGA log driver (https://github.com/jklmnn/genode-trabant/commit/5e7e4c361ac6f7d8a77e49626c92085710872fc6) logs are available without any graphical interface. This solves these problems for now.
The netcup.run file (https://github.com/jklmnn/genode-trabant/commit/095c44361517851631cb5d799f98929f27d4f10e) with this driver worked on the VM.
On local Qemu the ACPI platform info rom looks as follows:
<acpi>
<root_bridge bdf="0x0"/>
<bdf start="0" count="65536" base="0xb0000000"/>
<irq_override irq="11" gsi="11" flags="0xd"/>
<irq_override irq="10" gsi="10" flags="0xd"/>
<irq_override irq="9" gsi="9" flags="0xd"/>
<irq_override irq="5" gsi="5" flags="0xd"/>
<irq_override irq="0" gsi="2" flags="0x0"/>
</acpi>
But on the netcup VM the ROM is missing the bdf
tag:
<acpi>
<root_bridge bdf="0x0"/>
<irq_override irq="11" gsi="11" flags="0xd"/>
<irq_override irq="10" gsi="10" flags="0xd"/>
<irq_override irq="9" gsi="9" flags="0xd"/>
<irq_override irq="5" gsi="5" flags="0xd"/>
<irq_override irq="0" gsi="2" flags="0x0"/>
</acpi>
This causes the _parse_report_rom
function to fail which kills the platform driver.
The problem seems to be that the MCFG
is not found in repos/os/src/drivers/acpi/acpi.cc
in _parse_tables
.
After some more research the coupling of the PCI mechanism with the platform driver is much tighter than expected. Also due to the extensive changes in different Genode APIs porting the legacy platform driver to the current Genode requires a high effort. Neither option is feasible now for the required effort and expected outcome. Unless the virtual machine is started with -machine q35
or any other option that makes MMCONF available this is not supported on Genode.
Test VM/Root server support on netcup. Focus on: