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/d2c67...
[2] https://github.com/702nADOS/genode-CheckpointRestore-SharedMemory/blob/d2c67...
[3] https://github.com/genodelabs/genode/blob/16.05/repos/base/src/core/ram_sess...
Kind regards, Denis