jklmnn / genode-trabant

Genode Trabant
GNU Affero General Public License v3.0
0 stars 1 forks source link

Test netcup vm support. #4

Closed jklmnn closed 5 years ago

jklmnn commented 6 years ago

Test VM/Root server support on netcup. Focus on:

jklmnn commented 6 years ago

Booting an image on a vm does not seem to be easy. Using bender sticks in a boot loop.

jklmnn commented 6 years ago

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.

jklmnn commented 6 years ago

While NOVA still fails to boot, using sel4 the framebuffer test is working.

jklmnn commented 6 years ago

The boot should happen from https://github.com/jklmnn/genode/tree/netcup.

jklmnn commented 6 years ago

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.

jklmnn commented 6 years ago

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.

jklmnn commented 6 years ago

It seems that as soon as the terminal session is used (terminal.write is called) something locks up. There are three solutions now:

jklmnn commented 6 years ago

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.

jklmnn commented 5 years ago

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.

jklmnn commented 5 years ago

The problem seems to be that the MCFG is not found in repos/os/src/drivers/acpi/acpi.cc in _parse_tables.

jklmnn commented 5 years ago

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.