needed to add some service from CORE in hello_tutorial/run/

Stefan Kalkowski stefan.kalkowski at ...1...
Tue Jan 22 12:15:35 CET 2013

Hi Paul,

On 01/21/2013 10:08 PM, Paul Dufresne wrote:
> Before it works, I had to add these lines:
> 		<service name="RM"/>
> 		<service name="CPU"/>
> 		<service name="IO_PORT"/>
> 		<service name="IRQ"/>
> inside <parent-provides> section of

You're right. These service declarations are missing, at least if you
run this example on NOVA. If you try the same scenario on Linux, it will
probably work. If you try it on our base-hw kernel you'll miss the
IO_MEM service, but won't need the IO_PORT service for example ;-).

The component that requires all these different services is the timer,
which is simply used by the hello client to delay it's messages. So that
humans still can read them. The timer is implemented quite differently
on all the available platforms. For example on Linux we simply use a
system call for sleeping. On NOVA we use IBM's PIT, thereby we need I/O
ports. The base-hw ARM kernel uses a timer of the respective ARM SoC,
which typically requires memory mapped I/O (IO_MEM). Moreover, the timer
implementation on most platforms requires the creation of another
thread. Therefore, the CPU session is needed, as well as the RM session.

Originally, the example was meant to be really simple, that's why the
run script was written as simple as possible (and apparently only
written and tested on Linux)

I opened an issue in our issue tracker on Github to fix the insufficient
run script:

> I would have tought however that:
> 	<default-route>
> 		<any-service> <parent/> <any-child/> </any-service>
> 	</default-route>
> would have made it optional, which was not.

This only says: if a client asks for some service, first have a look
whether the parent provides such a service, if not have a look at your
other children.
Take for example the current, unmodified hello run script. When the
timer wants to create a thread, it requests a CPU session from its
parent - the init process. Given its configuration, init will first
examine the services its parent provides. But, there is no '<service
name="CPU"/>' entry in the '<parent-provides>' declaration. Thereby init
will examine its children configurations. Here it only finds two other
services: "Hello", and "Timer". So it will refuse the request from the
timer, and the timer will exit.

For more information about the configuration language, and the concepts
behind it, please refer to the release notes of the 10.05 release:

Best regards

Stefan Kalkowski
Genode Labs ยท

More information about the users mailing list