Boot Fiasco at ARM on QEMU

Tsai, Tung-Chieh tsaitungchieh at gmail.com
Wed Oct 8 19:47:42 CEST 2008


Dear Adam,

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.

>
>>   * 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?!
>
>
> Adam
> --
> Adam                 adam at os.inf.tu-dresden.de
>  Lackorzynski         http://os.inf.tu-dresden.de/~adam/
>
> _______________________________________________
> l4-hackers mailing list
> l4-hackers at os.inf.tu-dresden.de
> http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
>

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.

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.
Could you please give me some advice about it ?

-- 
Best Regards,
Tsai, Tung-Chieh




More information about the l4-hackers mailing list