Hello,
we use as a chained-boot loader bender[0], which relocates the boot modules before the NOVA kernel actually starts. You may try to remove it and see whether this changes things. For this you have to edit in
<genode-dir>/tool/run/boot_dir/nova
the lines where bender is used and make the hypervisor the first entry.
Than recompile some simple setup like printf.run and start it on your target machine. If you don't see any serial messages anymore, you may have to add the i/o ports of your serial device manually to the NOVA kernel source code [1]. Bender has also now a option 'norelocate' as used for sel4 [2], which you may also try.
Cheers,
Alex.
[0] <genode-dir>tool/boot/README [1] <genode-dir>contrib/nova-<hash>/src/kernel/nova/src/console_serial.cpp [2] <genode-dir>/tool/run/boot_dir/sel4
On 22.09.2016 00:48, Paul Dufresne wrote:
2016-09-21 8:20 GMT-04:00 Christian Helmuth <christian.helmuth@...1...>:
Need 05df2000 bytes to relocate modules. Relocating to 7980d000: Copying 483168 bytes...
[...]
Copying 114820 bytes...
If my calculations from this output are correct the boot modules cover RAM from 0x7980d000 to 0x7f5e9000. Maybe there's a collision in this region?
paul@...445...:~$ cat /proc/meminfo MemTotal: 2041768 kB
Could you please compare the region above against
cat /proc/iomem'
and check if it fits completely into "System RAM"?
Ehhh... At first I thought there was a problem... but i think it goes just before ACPI Non-volatile Storage 00100000-7f5ffbff : System RAM 01000000-015cb5d4 : Kernel code 015cb5d5-01b10aff : Kernel data 01c67000-01d34fff : Kernel bss 7f5ffc00-7f601bff : ACPI Non-volatile Storage 7f601c00-7f603bff : RAM buffer 7f603c00-7fffffff : reserved 7f800000-7ff7ffff : Graphics Stolen Memory
It sure looks like a Nova bug (had time to load modules, but not to show Nova welcome message). In src/init I see: void init (mword mbi) { // Setup 0-page and 1-page memset (reinterpret_cast<void *>(&PAGE_0), 0, PAGE_SIZE); memset (reinterpret_cast<void *>(&PAGE_1), ~0u, PAGE_SIZE); for (void (**func)() = &CTORS_G; func != &CTORS_E; (*func++)()) ; Hip::build (mbi); for (void (**func)() = &CTORS_C; func != &CTORS_G; (*func++)()) ; // Now we're ready to talk to the world Console::print ("\fNOVA Microhypervisor v%d-%07lx (%s): %s %s [%s]\n", CFG_VER, reinterpret_cast<mword>(&GIT_VER), ARCH, __DATE__, __TIME__, COMPILER_STRING); Idt::build(); Gsi::setup(); Acpi::setup(); Console_vga::con.setup(); Keyb::init(); }
I believe Hip::(build(mbr) reads the module, and I suppose do the relocations shown.
I am thinking about adding some Console::print inside the loop: for (void (**func)() = &CTORS_C; func != &CTORS_G; (*func++)()) ; which I barely understand as calling each functions in an array of Constructors (CTORS_C).
Wish I would knew where CTORS_C is defined, but I guess I need not to know. I am not so good with coding... so it might be just to the limit of my abilities to do and test that.
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main