mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-25 00:11:07 +00:00
fc6bcd9f9f
The Demo of 64bit Genode/NOVA fails during the booting phase when physical memory was tried to be mapped lying above 4G boundary. (qemu -m 4096 triggered it on some systems). The memory never got mapped and the attempt to access the virtual region resulted in a unexpected page fault inside Genode core. The latest revision removed the artificial boundary of 4G for 64bit. Example trace showing the issue: ([-1] lines show debugging output that mapping failed) ... int main(): --- create local services --- int main(): --- start init --- int main(): transferred 4047 MB to init int main(): --- init created, waiting for exit condition --- start new pager object with EIP=0x1025814, ESP=0x6001000 [init] Could not open file "ld.lib.so" start new pager object with EIP=0x10213e4, ESP=0x6001000 start new pager object with EIP=0x1037684, ESP=0x6001000 start new pager object with EIP=0x1021664, ESP=0x6001000 start new pager object with EIP=0x101e374, ESP=0x6001000 start new pager object with EIP=0x10295a4, ESP=0x6001000 start new pager object with EIP=0x1037db4, ESP=0x6001000 [init -> pci_drv] PCI driver started [init -> launchpad] Could not open file "ld.lib.so" [init -> launchpad] Could not open file "config" [init -> launchpad] Could not obtain config file [init -> ps2_drv] Detected ExPS/2 mouse - activating scroll-wheel and 5-button support. [init -> ps2_drv] Using keyboard with scan code set 1 (xlate). [init -> timer] Timer::Timeout_scheduler::Timeout_scheduler(Platform_timer*, Genode::Rpc_entrypoint*): starting timeout scheduler [init -> vesa_drv] int Framebuffer_drv::map_io_mem(Genode::addr_t, Genode::size_t, bool, void**, Genode::addr_t, Genode::Dataspace_capability*): fb mapped to 1000 start new pager object with EIP=0x101eaf0, ESP=0x401fef80 [init -> timer] Timer::Session_component::Session_component(Timer::Timeout_scheduler*, Genode::Cap_session*): created new session component, _session_cap.valid=1 start new pager object with EIP=0x1021d10, ESP=0x400fef80 start new pager object with EIP=0x1021d10, ESP=0x401fef80 [init -> vesa_drv] Could not open file "config" [init -> vesa_drv] Could not obtain config file [init -> vesa_drv] Found: VESA BIOS version 2.0 [init -> vesa_drv] OEM: VGABIOS Cirrus extension [init -> vesa_drv] Found: physical frame buffer at 0xfc000000 size: 0x00400000 [init -> vesa_drv] int Framebuffer_drv::map_io_mem(Genode::addr_t, Genode::size_t, bool, void**, Genode::addr_t, Genode::Dataspace_capability*): fb mapped to 400000 [init -> nitpicker] framebuffer is 1024x768@1 [init -> nitpicker] create session with args: fb_format=1, label="launchpad", ram_quota=1646592 [init -> nitpicker] Could not open file "config" [init -> nitpicker] Could not obtain config file [init -> nitpicker] create session with args: fb_width=400, fb_height=1504, fb_format=1, label="launchpad", ram_quota=1211392 [ 0] DEL MEM PD:0xffffffff8100d620->0xffffffff8100d320 SB:0x00100000 RB:0x00002a00 O:0x08 A:0x7 [-1] Pd::delegate snd->S::tree_lookup(0x100000) == 0x0 -- base-nova/contrib/src/pd.cpp:54 - Pd::snd 0xffffffff8100d620 =? Pd::kern 0xffffffff8100d620 [ 0] DEL MEM PD:0xffffffff8100d620->0xffffffff8100d320 SB:0x00100100 RB:0x00002b00 O:0x05 A:0x7 [-1] Pd::delegate snd->S::tree_lookup(0x100100) == 0x0 -- base-nova/contrib/src/pd.cpp:54 - Pd::snd 0xffffffff8100d620 =? Pd::kern 0xffffffff8100d620 [ 0] DEL MEM PD:0xffffffff8100d620->0xffffffff8100d320 SB:0x00100120 RB:0x00002b20 O:0x02 A:0x7 [-1] Pd::delegate snd->S::tree_lookup(0x100120) == 0x0 -- base-nova/contrib/src/pd.cpp:54 - Pd::snd 0xffffffff8100d620 =? Pd::kern 0xffffffff8100d620 [ 0] DEL MEM PD:0xffffffff8100d620->0xffffffff8100d320 SB:0x00100124 RB:0x00002b24 O:0x01 A:0x7 [-1] Pd::delegate snd->S::tree_lookup(0x100124) == 0x0 -- base-nova/contrib/src/pd.cpp:54 - Pd::snd 0xffffffff8100d620 =? Pd::kern 0xffffffff8100d620 [ 0] Killed EC:0xffffffff823ca880 SC:0xffffffff823cb740 V:0xe CS:0x2b EIP:0x1215a0 CR2:0x2b25fff ERR:0x6 (PT not found)
51 lines
1.1 KiB
Makefile
51 lines
1.1 KiB
Makefile
#
|
|
# \brief Download, and unpack the NOVA hypervisor.
|
|
# \author Stefan Kalkowski
|
|
# \author Alexander Boettcher
|
|
# \date 2012-06-04
|
|
#
|
|
|
|
VERBOSE ?= @
|
|
ECHO = @echo
|
|
GIT_URL = git://github.com/IntelLabs/NOVA.git
|
|
GIT_REV = ad92f48564b1ed53e67f58e194c918af4da6a32d
|
|
CONTRIB_DIR = contrib
|
|
PATCHES = $(shell find patches -name *.patch)
|
|
|
|
#
|
|
# Utility to check if a tool is installed
|
|
#
|
|
check_tool = $(if $(shell which $(1)),,$(error Need to have '$(1)' installed.))
|
|
|
|
$(call check_tool,git)
|
|
$(call check_tool,patch)
|
|
|
|
#
|
|
# Print help information by default
|
|
#
|
|
help::
|
|
|
|
prepare: $(CONTRIB_DIR)
|
|
|
|
help::
|
|
$(ECHO)
|
|
$(ECHO) "Prepare the NOVA base repository"
|
|
$(ECHO)
|
|
$(ECHO) "--- available commands ---"
|
|
$(ECHO) "prepare - checkout upstream source codes"
|
|
$(ECHO) "clean - remove upstream source codes"
|
|
$(ECHO)
|
|
|
|
$(CONTRIB_DIR)/.git:
|
|
$(VERBOSE)git clone $(GIT_URL) $(CONTRIB_DIR)
|
|
|
|
$(CONTRIB_DIR): $(CONTRIB_DIR)/.git
|
|
$(VERBOSE)cd $(CONTRIB_DIR); git reset --hard $(GIT_REV)
|
|
$(ECHO) "applying patches to '$(CONTRIB_DIR)/'"
|
|
$(VERBOSE)for i in $(PATCHES); do patch -d $@ -p1 < $$i; done
|
|
|
|
.PHONY: $(CONTRIB_DIR)
|
|
|
|
clean::
|
|
$(VERBOSE)rm -rf $(CONTRIB_DIR)
|