Associating Threads with Process Rm's
Bob Stewart
robjsstewart at ...196...
Fri Jan 23 18:21:33 CET 2015
Thank you for the reply, Norman.
I am running base-hw on 14.11.
The complete log output is attached. As you can see there is no faulting
address displayed. It sure looks like its complaining about the absence
of a pager.
The run script is fairly extensive. Over the weekend, I'll try to strip
it down to only the elements that appear to be involved in the issue
and reproduce it with that script, Then, I can submit it via git.
I'll build your documentation and see if that helps me.
Thanks for the help.
Bob
On 01/23/2015 03:28 PM, Norman Feske wrote:
> Hello Bob,
>
>> 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.
> this message is printed by the base-hw version of core if a program
> crashes (it corresponds to a segmentation fault on Linux). It would be
> interesting to see the surrounding log output of the message you quoted.
> Normally, core prints the instruction pointer and name of the thread
> that caused the trouble.
>
>> 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.
> I think you are on the wrong track. For implementing your service, you
> should not need to deal with the peculiarities of page-fault handling or
> thread creation at all.
>
>> I'm obviously confused about what's going with a process's region
>> manager handling of threads. Could someone please enlighten me?
> To get a clearer picture, you may find the documentation useful that I
> am currently writing. In particular the Sections "Component creation"
> (in the Architecture chapter) and "Page-fault handling" (in the
> Under-the-hood chapter) might be of interest:
>
> https://github.com/nfeske/genode-manual
>
> Right now, the document is not finished. So you have to go through the
> trouble to build it yourself (see the README for the instructions). I
> hope that it is still useful.
>
> To investigate your problem, may you consider to make your branch along
> with a run script publicly available (e.g., on GitHub) so that I can
> reproduce it?
>
> Cheers
> Norman
>
>
-------------- next part --------------
Starting kernel ...
kernel initialized
Genode 14.11-9-g36ca049 <local changes>
int main(): --- create local services ---
int main(): --- start init ---
int main(): transferred 505 MB to init
int main(): --- init created, waiting for exit condition ---
[init -> ctrl_module] --- Beaglebone Control Module Server ---
[init -> uart_drv] int main(int, char**): --- OMAP3 UART driver started ---
[init -> platform_drv] --- bbb platform driver running ---
[init -> ffat_fs] int main(int, char**): FAT filesystem server running
[init -> pwm_drv] --- am33xx pwm driver ---
[init -> sd_card_drv] --- OMAP3 SD card driver ---
[init -> ctrl_module] gpio 4 mode 2 dirn=1, pullup or down = 1
[init -> ctrl_module] gpio 5 mode 2 dirn=1, pullup or down = 1
[init -> ctrl_module] gpio 22 mode 4 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 23 mode 4 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 50 mode 6 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 51 mode 6 dirn=0, pullup or down = 0
[init -> ffat_fs] int main(int, char**): FAT filesystem going to wait for signal
[init -> ctrl_module] gpio 66 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 67 mode 7 dirn=1, pullup or down = 0
[init -> bbb_platform_client] --- bbb platform being configured ---
[init -> ctrl_module] gpio 68 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 69 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 89 mode 7 dirn=1, pullup or down = 0
[init -> ctrl_module] gpio 78 mode 4 dirn=0, pullup or down = 0
[init -> ctrl_module] gpio 79 mode 4 dirn=1, pullup or down = 0
[init -> bbb_platform_client] Enabled dmtimer 3 freq = 2
[init -> bbb_platform_client] Enabled dmtimer 4 freq = 1
[init -> bbb_platform_client] Enabled dmtimer 5 freq = 1
[init -> bbb_platform_client] Enabled dmtimer 6 freq = 1
[init -> bbb_platform_client] Enabled dmtimer 7 freq = 1
[init -> bbb_platform_client] Enabled PWM 1
[init -> bbb_platform_client] Enabled PWM 2
[init -> gpio_drv] --- am33xx gpio driver ---
[init -> bbb_platform_client] Enabled UART 5
[init -> platform_drv] void Ccm::ipu_clk_enable(BeagleBoneBlack::Device): Enabling MMC0
[init -> bbb_platform_client] Enabled MMC 0
[init -> platform_drv] void Ccm::ipu_clk_enable(BeagleBoneBlack::Device): Enabling MMC1
[init -> bbb_platform_client] Enabled MMC 1
[init -> platform_drv] void Ccm::ipu_clk_enable(BeagleBoneBlack::Device): I2C Function clock idle state is 0
[init -> pwm_drv] PWM port 0, num 1, period 31250, duty 1562, polarity 1, name=North
[init -> platform_drv] void Ccm::ipu_clk_enable(BeagleBoneBlack::Device): I2C Function clock is 1
[init -> bbb_platform_client] Enabled I2C 1
[init -> pwm_drv] PWM port 1, num 1, period 31250, duty 1562, polarity 1, name=South
[init -> pwm_drv] PWM port 0, num 2, period 31250, duty 1562, polarity 1, name=East
[init -> pwm_drv] PWM port 1, num 2, period 31250, duty 1562, polarity 1, name=West
[init] virtual void Genode::Child_policy::exit(int): child "bbb_platform_client" exited with exit value 0
[init -> gpio_drv] gpio 53 mode O value=0
[init -> gpio_drv] gpio 54 mode O value=0
[init -> gpio_drv] gpio 55 mode O value=0
[init -> gpio_drv] gpio 56 mode O value=0
[init -> i2c_drv] --- am33xx i2c driver ---
[init -> dmtimer_drv] --- am33xx DMtimer driver ---
[init -> Autopilot] void init_libc_ffat(): using the libc_ffat plugin
[init -> Autopilot] --- Autopilot application starting ---
[init -> Autopilot] fault handler: waiting for fault signal
[init -> pwm_drv] 4 Motors initialized
[init -> Autopilot] ---------- GPIO IRQ handler ----------
[init -> Autopilot] int main(): shared mem [1] is now 0x0[2] is 0x0
[init -> Autopilot] int main(): shared mem [1] is now 0x0[2] is 0x0
[init -> Autopilot] virtual void Autopilot::Motors::entry(): Starting PWM
[init -> uart_drv] virtual Uart::Driver* main(int, char**)::Omap_uart_driver_factory::create(unsigned int, un
signed int, Uart::Char_avail_callback&): Baudrate is not defined. Use default 115200
void Genode::Pager_object::unresolved_page_fault_occurred(): not implemented
unknown signal context
More information about the users
mailing list