Boot Fiasco at ARM on QEMU

Adam Lackorzynski adam at os.inf.tu-dresden.de
Thu Oct 9 23:34:52 CEST 2008


Hi,

On Thu Oct 09, 2008 at 01:47:42 +0800, Tsai, Tung-Chieh wrote:
> On Fri, Sep 26, 2008 at 1:56 AM, Adam Lackorzynski
> <adam at os.inf.tu-dresden.de> wrote:
> > Hi,
> >
> > On Wed Sep 24, 2008 at 22:13:10 +0800, Tsai, Tung-Chieh wrote:
> >>   Thanks for your help. I found that my problem is that I thought I
> >> could boot kernel image 'fiasco' independently without other things.
> >> Now I make the package under '.../l4/' and use `.../l4/pkg/bootstrap`
> >> to pack kernel image, run it on qemu, it has the following assertion
> >> failed message :
> >>
> >> Hello from Startup::stage2
> >>
> >> Assertion failed: 'prev_next'
> >>   in
> >>   /path/to/tuods/source/snapshot/kernel/fiasco/src/kern/buddy_alloc.cpp:34
> >>   at f0004da8
> >>
> >> Could you please tell me what does this means ?
> >
> > That likely means that the system memory size is not configured
> > properly. The l4-config system contains a parameter to configure the
> > platform memory size. It's called RAM_SIZE_MB. Is that set properly?
> >
> 
> Thanks your help, I found I use default QEMU setting of integratorcp,
> which is not the same to what l4 set.
> 
> >> Besides, I have a few question :
> >>
> >>   * What's your building environment ? I use gcc-4.2.2 build by
> >>     buildroot, it will has some strange problem on gcc itself.
> >>     And then I test some corss-compiler I have, some works but
> >>     some failed. gcc-3.4.4-glibc-2.3.5 build by crosstool works
> >>     but gcc-3.4.5-glibc-2.3.5 failed on the PRE_LOAD test of
> >>     `make -C l4 config`.
> >>     Is there any recommend version of cross-compiler ?
> >
> > I use 4.2, and that works (most of the time ;). If the failure is
> > something that could be a bug in the build system it would be good to
> > know.
> 
> I found gcc build by buildroot failed seems because it use uclibc, and
> pre-build gcc built on 32-bit x86 won't pass the PRE_LOAD test on
> 64-bit environment, but they could build fiasco kernel successfully.

Yes, those must be compatible.

> >>   * I guess what bootstrap do is just packing sigma0, roottask, and
> >>     so on, then do what a boot-loader do. So, if I can put them
> >>     on correct position, for examples, by some tools or another
> >>     boot loader, is the bootstrap still necessary ?
> >
> > Bootstrap also fills out memory information and sets up a bit multi-boot
> > structures, so yes, it's necessary.
> >
> >>   * Since all packages in '.../l4/pkg' are not necessary to build
> >>     a hello test, is there a way to build just only what I need,
> >>     not the whole package under `.../l4/pkg` ?
> >
> > Admittedly you need quite a few packages to just build the hello target.
> > The repomgr hello target should just contain the packages that are
> > needed. But if you're just interested in the kernel, you should not need
> > to recompile pkg/ very often?!
> >
> 
> I found it strange if I don't change the value of DEFAULT_RELOC_arm
> to other value, the hello example won't work, but other examples, such
> as log, work fine in original setting.

The DEFAULT_RELOC of hello? Was the error an overlap?

> And then I try to run l4linux, but get the following trouble on
>  `names` server :
> 
> oottask: Loading 13 modules.
> #05: loading "names"
>      from [02072000-020841a4] to [00148000-00150cec][00151000-0015b000]
>      entry at 00050060 via trampoline page code
> #06: loading "log"
>      from [02085000-020962fc] to [00160000-00168aec][00169000-001966c0]
>      entry at 0005105c via trampoline page code
> #07: loading "dm_phys -v"
>      from [02097000-020b81a4] to [001a0000-001b7928][001b8000-001c1000]
>      entry at 00052064 via trampoline page code
> #08: loading "simple_ts -t 10"
>      from [020b9000-020cd2fc] to [001f0000-001fb9b4][001fc000-0020a480]
>      entry at 00053068 via trampoline page code
> #09: loading "l4io"
>      from [020ce000-020f91a4] to [02000000-02021ef0][02022000-0203c000]
>      entry at 00054060 via trampoline page code
> #0a: loading "bmodfs"
>      from [020fa000-021231a4] to [00210000-0022fb38][00230000-00247000]
>      passing module libloader.s.so                        [ 02124000-02152f40 ]
>      passing module libld-l4.s.so                         [ 02153000-02167540 ]
>      passing module shared_test                           [ 02168000-0216a468 ]
>      passing module vmlinuz                               [ 0216b000-023a2240 ]
>      passing module rd                                    [ 023a3000-033a3000 ]
>      passing module l4linux.cfg                           [ 033a3000-033a307e ]
>      entry at 00055104 via trampoline page code
> #0b: loading "loader l4linux.cfg"
>      from [033a4000-033de1a4] to [002c0000-002ef720][002f0000-0030f000]
>      entry at 0005606c via trampoline page code
> 
> log     | [6.0] log/server/src/logserver.c:288:main():
> log     |  Error: Cannot register at nameserver, falling asleep
> log     |
> log     |
> log     | Exiting with 1
> 
> ROOT: task 7.00 at 001a6eb0 is trying to get page 00000000 allocated by task 0
> 
>   --double page fault----------------------------------------PC: 00087680
> 
> 
> It's strange since there is no problem on running 'log' with all test.

What do you mean 'log with all test'?

> Could you please give me some advice about it ?

Does something change if you leave out programs from the end, e.g.
loader, bmodfs include its modules, l4io?



Adam
-- 
Adam                 adam at os.inf.tu-dresden.de
  Lackorzynski         http://os.inf.tu-dresden.de/~adam/




More information about the l4-hackers mailing list