kernel.ld.arm virt_address

Adam Lackorzynski adam at
Thu Nov 10 11:48:03 CET 2011

On Tue Nov 08, 2011 at 18:03:38 -0800, Wesley Miaw wrote:
> I'm trying to understand where the value of virt_address inside
> kernel.ld.arm is coming from. The value is currently 0xf0000000 and the
> kernel's interrupt vector table is placed at 0xffff0000.

Which is a processor requirement.
> On my Cortex-A9 + uATX Versatile Express board this corresponds to the HSB
> AXI (peripherals communication bus). The memory map for the RealView
> Emulation Baseboard maps the 0xf0000000 area to logic tile site 2.

Those are physical addresses, vectors are virtual.

> An objdump of the fiasco image shows that a number of kernel sections are
> being placed into 0xf0000000 and higher. And things work, but I would
> think that the correct address should be somewhere in RAM. (RAM which you
> then have to not withhold from sigma0.)

The kernel also runs in virtual addresses, so 0xf0000000 is backed with

> When I try to move the virt_address and .ivt address to somewhere in DRAM
> like 0x90000000 and 0x9fffffff respectively the kernel fails to load.
> Maybe because access is restricted although I don't think the MMU would
> have been turned on yet (but I haven't yet found the place where the MMU
> is turned on--I would guess by sigma0 or fiasco).

You cannot move the vector table somewhere else, and also again
virt != phys.

Adam                 adam at

More information about the l4-hackers mailing list