Boot Fiasco at ARM on QEMU
adam at os.inf.tu-dresden.de
Thu Oct 9 23:34:52 CEST 2008
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 at os.inf.tu-dresden.de
More information about the l4-hackers