FreeBSD and qemu-neo1973 (was: Re: Comment bug in locore.S?)
Olivier Houchard
mlfbsd at ci0.org
Fri Sep 28 04:45:45 PDT 2007
On Fri, Sep 28, 2007 at 12:17:20PM +0200, Marius Nuennerich wrote:
> On Fri, 28 Sep 2007 12:23:32 +0200
> Olivier Houchard <mlfbsd at ci0.org> wrote:
>
> > On Fri, Sep 28, 2007 at 11:30:44AM +0200, Marius Nuennerich wrote:
> > > On Thu, 27 Sep 2007 18:51:00 -0500 (CDT)
> > > Mark Tinguely <tinguely at casselton.net> wrote:
> > >
> > > >
> > > > How about saving the jump address in another register also before the jump:
> > > >
> > > > ldr r10, .Lvirt_done
> > > > ldr pc, .Lvirt_done
> > >
> > > I tried this but used r9, anyway the register isn't used otherwise and
> > > it's contents is R09=c00002a4 after qemu crashes. Is it possible that
> > > this would be the right address if the kernel would start at 0x30000000
> > > and not on 0x30008000 physical address?
> >
> > Ah good point. KERNVIRTADDR should be 0xc0008000, not 0xc0000000.
> > As we're mapping it with sections, we don't have enough granularity to map it
> > to 0xc0000000.
>
> OK, I changed KERNVIRTADDR in the kernel config. qemu still crashes with
> qemu: fatal: Trying to execute code outside RAM or ROM at 0xc00082ac
>
> which should be mapped. But now it doesn't print an A as the last
> letter over serial line, it's an f. What I don't understand is the the
> jump to 0xc00082a4 seems to be OK now but a few instructions later it
> goes boom. Maybe this is the strb instruction for printing chars. Could
> it be that this won't work after jumping to 0xc... ?
> Why does the printing of f still work before the ldr?
>
> Is there a description available what KERNVIRTADDR, KERNPHYSADDR,
> PHYSADDR, KERNBASE, et al. mean?
No there's not, and you're right it should be documented.
KERNVIRTADDR is the virtual address at which the kernel is loaded (and
linked).
KERNPHYSADDR is the physical address at which the kernel is loaded.
PHYSADDR is the physical address of the RAM.
KERNBASE is the virtual address of the beginning of the KVA.
STARTUP_PAGETABLE_ADDR is a physical address, suitable for the very early
pagetable we build in locore.S.
FLASHADDR is the address of the flash, virtual or physical depending on
what the loader does. That, and LOADERRAMADDR (the address at which the
loader maps the RAM if we're running with the MMU enabled, and the physical
address if not), are used to detect if we're running from flash, and if so
copying the kernel to memory.
Regards,
Olivier
More information about the freebsd-arm
mailing list