LDSO Question
Sam Kerr
kerr.sam at ...9...
Fri Mar 18 21:14:24 CET 2011
Hi Sebastian,
Thanks for the suggestions. You pointing out several mistakes will be help me out in the future.
However, I am not able to build the LDSO application using 'make run/ldso'. Instead, it says :
Error: No run script for ldso
make: *** [run/ldso] Error 255
Any suggestions?
-Sam Kerr
On Mar 17, 2011, at 10:50 AM, Sebastian Sumpf wrote:
> Hi,
>> <config>
>> <parent-provides>
>> <service name="ROM"/>
>> <service name="RAM"/>
>> <service name="IRQ"/>
>> <service name="IO_MEM"/>
>> <service name="IO_PORT"/>
>> <service name="CAP"/>
>> <service name="PD"/>
>> <service name="RM"/>
>> <service name="CPU"/>
>> <service name="LOG"/>
>> </parent-provides>
>>
>> <default-route>
>> <any-service> <parent/> <any-child/> </any-service>
>> </default-route>
>> <start name="ps2_drv">
>> <resource name="RAM" quantum="1M"/>
>> <provides><service name="Input"/></provides>
>> </start>
>> <start name="pci_drv">
>> <resource name="RAM" quantum="1M"/>
>> <provides><service name="PCI"/></provides>
>> </start>
>> <start name="timer">
>> <resource name="RAM" quantum="1M"/>
>> <provides><service name="Timer"/></provides>
>> </start>
>> <start name="nitpicker">
>> <resource name="RAM" quantum="1M"/>
>> <provides><service name="Nitpicker"/></provides>
>> </start>
>> <start name="vesa_drv">
>> <resource name="RAM" quantum="1M"/>
>> <provides><service name="Framebuffer"/></provides>
>> </start>
>> <start name="launchpad">
>> <resource name="RAM" quantum="32M"/>
>> </start>
>> <start name="ldso">
>> <resource name="RAM" quantum="32M"/>
>> </start>
>> <start name="sharedlib">
>> <resource name="RAM" quantum="10M"/>
>> </start>
>> <memsection name="ldso" file="ldso" direct="true" />
>> </config>
>
> As I mentioned before, *never* start ldso in your Genode config file.
> All <start> tags are programs that will be launched by Genode, if during
> this process a binary is encountered that is linked against shared
> libraries, Genode will *automatically* invoke ldso in order to load the
> program and the needed shared libs.
>
> To give you a small example (please run make run/ldso from your Genode
> build directory). This will build an application called 'test-ldso'.
>
> If you run 'objdump -p test-ldso you will see:
>
> bin/test-ldso: file format elf32-i386
>
> Program Header:
> PHDR off 0x00000034 vaddr 0x00001034 paddr 0x00000000 align 2**2
> filesz 0x000000c0 memsz 0x000000c0 flags r--
> INTERP off 0x000190b5 vaddr 0x003180b5 paddr 0x003180b5 align 2**0
> filesz 0x00000007 memsz 0x00000007 flags r--
> LOAD off 0x00001000 vaddr 0x00300000 paddr 0x00300000 align 2**12
> filesz 0x0002499c memsz 0x0002499c flags r-x
> LOAD off 0x00026000 vaddr 0x00325000 paddr 0x00325000 align 2**12
> filesz 0x00008037 memsz 0x0001b070 flags rwx
> DYNAMIC off 0x0002b4ec vaddr 0x0032a4ec paddr 0x0032a4ec align 2**12
> filesz 0x00002b4b memsz 0x00015293 flags rwx
> EH_FRAME off 0x00024cc8 vaddr 0x00323cc8 paddr 0x00323cc8 align 2**2
> filesz 0x00000cd4 memsz 0x00000cd4 flags r--
>
> Dynamic Section:
> NEEDED /build/genode_rtld_elf/var/libcache/libc/libc.lib.so
> NEEDED /build/genode_rtld_elf/var/libcache/libm/libm.lib.so
> NEEDED
> /build/genode_rtld_elf/var/libcache/test-ldso/test-ldso.lib.so
> HASH 0x003180bc
> STRTAB 0x0031bc00
> SYMTAB 0x00319320
> STRSZ 0x0000564f
> SYMENT 0x00000010
> DEBUG 0x00000000
> PLTGOT 0x0032a59c
> PLTRELSZ 0x00000018
> PLTREL 0x00000011
> JMPREL 0x00321510
> REL 0x00321250
> RELSZ 0x000002c0
> RELENT 0x00000008
>
> The 'NEEDED' shows you that test-ldso depends on libc.lib.so,
> lbm.lib.so, and test-ldso.lib.so. In order to start the application in
> Genode a config file would look like this:
>
> <config>
> <parent-provides>
> <service name="ROM"/>
> <service name="LOG"/>
> </parent-provides>
> <default-route>
> <any-service> <parent/> </any-service>
> </default-route>
> <start name="test-ldso">
> <resource name="RAM" quantum="1M"/>
> </start>
> </config>
>
> You only need to start 'test-ldso', but the boot loader file would look
> like this:
>
> title Genode on L4ka::Pistachio
> kernel /pistachio/kickstart
> module /pistachio/x86-kernel
> module /pistachio/sigma0
> module /genode/core
> module /genode/config
> module /genode/init
> module /genode/ldso
> module /genode/test-ldso
> module /genode/test-ldso.lib.so
> module /genode/libc.lib.so
> module /genode/libm.lib.so
>
> Here you load the shared libaries and ldso so Genode can find them when
> starting test-ldso. You can find the whole example under
> <GENODE_BUILDDIR>/var/run/ldso.
>
> So, assuming that 'sharedlib' is a program and *not* a library:
>
> Remove this part from your config file:
>
> <start name="ldso">
> <resource name="RAM" quantum="32M"/>
> </start>
>
> If 'sharedlib' is a library remove this start tag a well and substitute it with the actual program using the library.
>
> Remove:
>
> <memsection name="ldso" file="ldso" direct="true" />
>
> This looks like it was taken from an elfweaver config file which is OKL4 specific and has nothing to do with Genode configuration altogether.
>
> Good luck,
>
> -- Sebastian
>
>
>
>
> ------------------------------------------------------------------------------
> Colocation vs. Managed Hosting
> A question and answer guide to determining the best fit
> for your organization - today and in the future.
> http://p.sf.net/sfu/internap-sfd2d
> _______________________________________________
> Genode-main mailing list
> Genode-main at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/genode-main
More information about the users
mailing list