Hi,
Thanks you very much for that. I now have it running.
I have another question about Genode. More specifically, I was wondering whether
any of the Iguana services at all. I ask this given that the weaver.xml file
refers to memsections and pds (i'm assuming that means protection domains).
Peter
----- Forwarded message from Norman Feske <norman.feske@...1...> -----
Date: Tue, 05 Jan 2010 08:43:36 +0100
From: Norman Feske <norman.feske@...1...>
Reply-To: Genode OS Framework Mailing List <genode-main(a)lists.sourceforge.net>
Subject: Re: Broken assertion
To: Genode OS Framework Mailing List <genode-main(a)lists.sourceforge.net>
Hi Peter,
this is a different error as the one mentioned in the Wiki. It actually
tells you what's wrong. ;-) In the 'weaver.xml' file, there is a
memsection referring to a file called 'config'. This is the
configuration file of Genode's init process. You can use a copy of
the template provided at 'os/config/demo'. You can either specify this
file as filename for the 'config' module entry in 'weaver.xml' or copy
it to your '<builddir>/bin/' directory (and of course rename it to
'config'). This bit was missing in the Wiki. So I added it to the Wiki
page. Thank you for pointing it out.
Norman
Peter Nguyen wrote:
> Hi,
>
> In the wiki describing how to build Genode on OKL4, does the bug alert refer
to
> following message: An error occurred: [Errno 2] No such file or directory:
> 'config'?
>
> I've followed the build instructions, and i've changed the value as suggested
as
> the quick fix, but I still get this error.
>
> As usual, any help would be greatly appreciated.
>
> Peter
------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev
_______________________________________________
Genode-main mailing list
Genode-main(a)lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/genode-main
----- End forwarded message -----
Hi,
I am experiencing some strange behaviour in genode.
In base/include/base/heap.h
I placed debug output in the Heap::Heap constructor:
Heap(Ram_session *ram_session,
Rm_session *rm_session,
size_t quota_limit = UNLIMITED,
void *static_addr = 0,
size_t static_size = 0)
:
_ds_pool(ram_session, rm_session),
_quota_limit(quota_limit), _quota_used(0),
_chunk_size(MIN_CHUNK_SIZE)
{
PDBG("quota_limit=%d this=0x%p &_quota_limit=0x%p",
_quota_limit, (void*)this, &_quota_limit);
enter_kdebug("quota_limit");
if (static_addr)
_alloc.add_range((addr_t)static_addr, static_size);
}
This prints the following:
quota_limit=-1 this=0x1851d8 &_quota_limit=0x185630
Then I placed some debug output in base/src/base/heap/heap.cc:alloc
bool Heap::alloc(size_t size, void **out_addr)
{
/* serialize access of heap functions */
Lock::Guard lock_guard(_lock);
PDBG("size=%d _quota_used=%d _quota_limit=%d *this=0x%p
&_quota_limit=0x%p", size, _quota_used, _quota_limit, (void*)this,
&_quota_limit);
And this prints the following:
_quota_limit=0 *this=0x1851d8 &_quota_limit=0x18563c
Seems to me like the compiler did not correctly calculate the member
addresses (this problem appears to be the same that caused the previous
error I posted). Do you have an idea why that happened and how to fix it?
Mand thanks in advance,
Steffen Liebergeld
--
Dipl.-Inf. Steffen Liebergeld <steffen@...37...>
Security in Telecommunications
TU Berlin/ Deutsche Telekom Laboratories
Ernst-Reuter-Platz 7, 10587 Berlin
Phone: +30 8353 58 263
Web: http://www.t-labs.tu-berlin.de/sect
Hi again,
during startup of the init task, the init thread tries to get an
"Env::rm_session" from core. Core responds by giving it a capability
with local_name() == 0, which is invalid in my context. The cap is
returned from _process.rm_session_cap(), which is implemented in process.h:
Rm_session_capability rm_session_cap() const {return _rm.cap(); }
_rm is defined as Rm_connection in class Process. I am unsure however,
which Constructor belongs to to Rm_connection, and why it sets the
capability to zero. Can you help me by pointing me to the right spots?
Many thanks in advance.
Greetings,
Steffen
--
Dipl.-Inf. Steffen Liebergeld <steffen@...37...>
Security in Telecommunications
TU Berlin/ Deutsche Telekom Laboratories
Ernst-Reuter-Platz 7, 10587 Berlin
Phone: +30 8353 58 263
Web: http://www.t-labs.tu-berlin.de/sect
We are happy to announce the new version 10.05 of the Genode OS
Framework. This version brings many functional improvements, most
notably a new configuration concept that allows for the definition
of arbitrary client-server relationships and least-privilege
policies. We also want to highlight the new audio infrastructure,
which enables the playback and mixing of multiple audio streams
on popular PC sound hardware. To increase the productivity for
developers, there is a new build system, improving the performance
on multi-processor systems.
Release-notes summary for version 10.05
---------------------------------------
* Mandatory access control and session routing
* Added audio-out support
* OKLinux stub drivers for sound and GUI
* New build system optimized for parallel builds
* Arora web browser
* Port of libSDL
You can find the complete release notes for the version 10.05 here:
http://genode.org/documentation/release-notes/10.05/
The new release is available to the project's subversion repository
and at the Genode download page:
http://genode.org/download/latest-release
Regards
--
Norman Feske
Genode Labs
http://www.genode-labs.com · http://genode.org
Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden
Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth
Hello Genoders,
I'm having troubles with the C++ exception mechanism:
In base/src/platform/_main.cc:_main(), the exception frames are set up
in function init_exeption_handling(). Unfortunately, during startup of
the init task, this runs into a null pointer. I could trace this back to
base/src/base/cxx/exception.cc:__register_frame(__eh_frame_start), which
obviously calls some gcc-provided function. I am using the toolchain you
provide on your website. Did you have similar experiences during your
development? Do you have an idea what is going wrong in my setup? Where
should I start my investigations?
Many thanks in advance,
Steffen
--
Dipl.-Inf. Steffen Liebergeld <steffen@...37...>
Security in Telecommunications
TU Berlin/ Deutsche Telekom Laboratories
Ernst-Reuter-Platz 7, 10587 Berlin
Phone: +30 8353 58 263
Web: http://www.t-labs.tu-berlin.de/sect
Hello friendly Genode-people,
I am having difficulties unterstanding the handling of the server badge
(currently in core only)
As far as I understand, the badge identifies the receipient-object.
Therefore the sender encodes the address of the receiving object's
capability in the first slot of the send buffer.
On the receiver side, in Server_activation_base::entry(), the badge is
used to identify the correct object, whose dispatch() Method is then called.
The server however has to insert the capability into the Object_pool
first, which is done at Server_entrypoint::manage().
Now I am currently having problems in core's main function. During
Ram_session_client(init_ram_session_cap).ref_account(env()->ram_session-cap()),
an IPC call is sent to the "activation"-Thread, during which an invalid
badge is used. Consequently the activation thread does not find the
corresponding object and returns ERR_INVALID_OBJECT.
This raises the following questions: a) Which object is the correct
handler for this call, and b) where is the capability of the receiver
allocated and registered at the Object_pool?
I am looking forward to hearing from you.
Many thanks in advance.
Greetings,
Steffen
--
Dipl.-Inf. Steffen Liebergeld <steffen@...37...>
Security in Telecommunications
TU Berlin/ Deutsche Telekom Laboratories
Ernst-Reuter-Platz 7, 10587 Berlin
Phone: +30 8353 58 263
Web: http://www.t-labs.tu-berlin.de/sect
Hello all,
Below are two separate issues carelessly smashed into one e-mail - if
you have any comments on either one then I'm all ears.
-------- x86 ---------
After building Genode+Fiasco [1] I can run the hello demo and scout
demo (from "build/bin/*") on top of Linux, but I can't seem to boot
bare metal. I'm copying the binaries from
"<compound-build>/genode.fiasco_x86/bin", getting bootstrap and sigma0
from "<compound-build>/l4env/bin/...", and L4 kernel from
"<compound-build>/fisco_x86/main".
When I boot, the kernel starts up, prints a pc and sp (I notice
"Roottask" has a stack address of all zeros). And quickly restarts.
I'd paste output but it auto restarts and I don't have a serial port
to over which I could collect output.
The config (this is one, I've tried lots of alterations):
##############
<config>
<start>
<filename>vesa_drv</filename>
<ram_quota>2M</ram_quota>
</start>
<start>
<filename>timer</filename>
<ram_quota>0x20000</ram_quota>
</start>
<start>
<filename>nitpicker</filename>
<ram_quota>1M</ram_quota>
</start>
<start>
<filename>hello_server</filename>
<ram_quota>1M</ram_quota>
</start>
<start>
<filename>hello_client</filename>
<ram_quota>1M</ram_quota>
</start>
</config>
#################
And the grub entry:
#############
title L4 Fiasco + Genode (10.02)
kernel /bootstrap -modaddr=0x03000000
module /fiasco nowait -nokdb -tbuf_entries=16384 -serial_esc
module /sigma0
module /core
module /init
module /config
module /vesa_drv
module /nitpicker
module /timer
module /launchpad
module /testnit
module /scout
module /nitlog
module /liquid_fb
module /hello_server
module /hello_client
###############
Any help? Let me know if you want more info.
[1] http://genode.org/community/wiki/GenodeOnL4Fiasco
-------- ARM --------
Separately, I'm having trouble building Fiasco on ARM - basically its
missing types.h. Am I missing a step?
After altering specs.conf "SPECS = genode fiasco_arm"
And after setting tools.conf to point at my cross compiler:
[tommd@...36... genode-arm]$ cp tool/builddir/etc/build.conf.fiasco_x86
tool/builddir/etc/build.conf.fiasco_arm
[tommd@...36... genode-arm]$ ./tool/builddir/create_builddir fiasco_arm
GENODE_DIR=. BUILD_DIR=~/dev/genode-arm/3rd-build/genode-fiasco_arm
L4_DIR=~/dev/genode-arm/3rd-build/3rd/l4env
successfully created build directory at
/home/tommd/dev/genode-arm/3rd-build/genode-fiasco_arm
[tommd@...36... genode-arm]$ make -C ~/dev/genode-arm/3rd-build/genode-fiasco_arm/
make: Entering directory
`/home/tommd/dev/genode-arm/3rd-build/genode-fiasco_arm'
Processing /home/tommd/dev/genode-arm/base-fiasco/src/core/arm/target.mk
------------------------------------------------------------------------
Library avl_tree
COMPILE avl_tree_avl_tree.o
MERGE avl_tree.lib.a
Library slab
COMPILE slab_slab.o
MERGE slab.lib.a
Library allocator_avl
COMPILE allocator_avl_allocator_avl.o
MERGE allocator_avl.lib.a
Library cxx
COMPILE cxx_exception.o
COMPILE cxx_guard.o
COMPILE cxx_malloc_free.o
In file included from
/home/tommd/dev/genode-arm/base/include/base/typed_capability.h:17,
from
/home/tommd/dev/genode-arm/base/include/parent/capability.h:17,
from /home/tommd/dev/genode-arm/base/include/base/env.h:20,
from
/home/tommd/dev/genode-arm/base/src/base/cxx/malloc_free.cc:17:
/home/tommd/dev/genode-arm/base-fiasco/include/base/capability.h:18:
fatal error: l4/sys/types.h: No such file or directory
compilation terminated.
make[4]: *** [cxx_malloc_free.o] Error 1
make[3]: *** [cxx.tag] Error 2
make[2]: *** [all_sequence] Error 2
make[1]: *** [single_target] Error 2
make: *** [.] Error 2
make: Leaving directory `/home/tommd/dev/genode-arm/3rd-build/genode-fiasco_arm'
Any help on either of these would be much appreciated. I'd love to
use/contribute to Genode but if I can't build it myself / be self
sufficient (perhaps I should be embarrassed) then I'm far from
helpful!
Cheers,
Thomas
Hello
Recently we made an attempt to get Genode-on-OKL4 (v2.1.1.patch9) running on ARM11 (core ARM1136jf-s). The outcome was that the system stalled during initialization, because core waited endlessly for init getting started. OKL4's KDB showed that init's code section was set to read-only but not read-execute with the outrcome that the OKL4 scheduler refused to pass control to init.
Interestingly this was not observed on an ARM9 platform, and we think that this just happened by chance, because the main reason of the problem seems to be how the class Dataspace_component maintains properties.
In the OKL4 environment the protection domains are packed into the ELF file as modules, being itself ELF objects which are unpacked by function _setup_elf() of file base/src/base/process/process.cc. The function receives from core the capability of the ELF object (init is the first one) and parses the included segments to setup the pager. It checks whether any segment has the writable flag set. For such segments RAM is allocated and initialized, and the associated Dataspace_component gets the boolean attribute _writable set. For all other segments a Dataspace_component with the boolean attribute _writable unset is created, making no distinction between read-only and read-execute segments.
The first attempt to start init leads to a page fault, and the methode Rm_client::pager() in file base/src/core/rm_session_component.cc is invoked. The method retrieves the Dataspace_component from the page fault parameters. With that a Mapping object is created to setup the response for the Ipc_pager. The constructor Mapping::Mapping() in file base-okl4/src/base/ipc/pager.cc receives the attribute _writable from the Dataspace_component. If it is set, the page attribute is set to L4_FullyAccessible, otherwise to L4_Readable. The outcome is that the code section is mapped with the X flag unset, and it is not executed while the DATA and BSS sections get the X flag set although this makes little sense.
We could solve the problem by setting the page attribute to L4_Readable | L4_eXexcutable, but we still keep wondering why the problem only appears on ARM11 but neither on ARM9 or IA32, although the constructor code is always the same. Finally we think that the implementation of Dataspace_component is a bit short-handed regarding the handling of page attributes: there should be a distinction between read-only and read-execute (and DATA/BSS sections should not have the execute attribute set). At least both the ELF format and OKL4's MapControl interface maintain the full set of RWX flags.
Regards
Frank Kaiser
OpenSynergy GmbH
Rotherstr. 9
10245 Berlin
Tel.: +49 (30) 20 18 18 35 28
Fax: +49 (30) 20 18 18 35 02
Email: Frank.Kaiser@...24... <mailto:andre.hergenhan@...24...>
www.opensynergy.com <http://www.open-synergy.com>
Handelsregister: Amtsgericht Charlottenburg, HRB 108616B
Geschäftsführer: Frank-Peter Böhm, Dr. Stefaan Sonck Thiebaut, Rolf Morich