Hi,
I'm being spectacularly unsuccessful in getting a process thread to
be associated with an RM Pager object.
I have an application whose main function creates an object instance
based on a Thread. That instance creates another object instance
whose main purpose is to read and write to an ffat file system
through the libc plug-in for that purpose. As soon as this object
attempts to access the file system a error message complaining about
no pager object implemented ("void
Genode::Pager_object::unresolved_page_fault_occurred(): not
implemented") occurs.
On re-reading the Architecture documentation about RM in the Core,
it very briefly explains that a thread capability for a
pager needs to be created for the thread, using an add_client
function call. I assumed this would be done in the thread entry()
member function and added the following line of code at the the
beginning of that function:
Thread_capability ap = Thread::cap();
Pager_capability pc = env()->rm_session()->add_client(ap);
env()->cpu_session()->set_pager(ap, pc);
This did not work and I got he same error message about no pager
object.
In looking through the threading code, I noticed that
Thread_base::start() creates the thread and sets up a pager. Adding
a void start() function to my thread with a call to the
Thread_base::start function resulted in the same error.
I finally got a pager to be associated with the thread and access
the file system by creating my own thread object in my thread
start() function, binding it to the PD, and setting up the pager
with the snippet shown above the same as was done in the
Thread_base::start() function.
I'm obviously confused about what's going with a process's region
manager handling of threads. Could someone please enlighten me?
Thanks in advance,
Bob Stewart
Bob Stewart