Intercepting ram session of child

Denis Huber huber.denis at ...435...
Sun Aug 14 18:03:02 CEST 2016


Hello Genode community,

I am working on a checkpointing component which runs in Genode's 
userland, on Genode 16.05 on the foc kernel (pbxa9 build). I want to 
provide custom Ram, Pd, and Cpu sessions for a child component (target) 
to intercept the remote procedure calls to keep book of the state of the 
child. But I am having trouble to create such sessions.

I looked into the gdb_monitor and noux component and tried to adopt the 
concepts used. In the gdb_monitor, I found the pd_session_component 
without a pd_root implementation a very promising approach.

It creates a custom Gdb_monitor::Pd_session_component, which wraps a 
Genode::Pd_connection object. In the constructor the manage method of an 
entrypoint for this Pd_session_component is called, thus the remote 
procedure calls to this object can be handled.

I tried to adopt this concept for a custom Ram session. I created a very 
short test program [1] (Run script in [2]) which creates a custom 
Ram_session_component and tries to transfer quota from its environment 
to the custom Ram session component. The quota transfer fails with error 
code -1, which means the recipient of the transfer is not a valid 
session component [3].

I think the problem is, that I have not created a valid capability of 
the custom Ram_session_component. What important fact do I miss in my 
implementation? I am grateful for every hint you give me :)

[1] 
https://github.com/702nADOS/genode-CheckpointRestore-SharedMemory/blob/d2c6705bb9951f58d3b01f8e35fa68197cc73cd7/src/random/main.cc

[2] 
https://github.com/702nADOS/genode-CheckpointRestore-SharedMemory/blob/d2c6705bb9951f58d3b01f8e35fa68197cc73cd7/run/random.run

[3] 
https://github.com/genodelabs/genode/blob/16.05/repos/base/src/core/ram_session_component.cc#L75


Kind regards,
Denis




More information about the users mailing list