PHYSADDR

Ian Lepore ian at FreeBSD.org
Fri Mar 1 15:47:35 UTC 2013


On Thu, 2013-02-28 at 23:05 -0800, Tim Kientzle wrote:
> On Feb 28, 2013, at 5:10 PM, Ian Lepore wrote:
> 
> > On Thu, 2013-02-28 at 08:58 -0800, Tim Kientzle wrote:
> >> On Feb 28, 2013, at 8:20 AM, Ian Lepore wrote:
> >> 
> >>> On Wed, 2013-02-27 at 22:27 -0800, Tim Kientzle wrote:
> >>>> Starting to look at what is needed for a Generic ARM kernel.
> >>>> There's a lot here; I sincerely hope I'm not the only one… ;-)
> >>>> 
> >>>> First up:  Can we get rid of PHYSADDR?
> >>>> 
> >>> 
> >>> If you mean, can we get rid of it within the runtime kernel, I'd say
> >>> yes, because we can use a global variable instead which is easily
> >>> settable in the entry code.
> >> 
> >> It doesn't seem to be used in the runtime kernel.  As far as
> >> I can see, it's purely a bootstrap concept.
> >> 
> >>> On the other hand, I've been working
> >>> towards getting that value set correctly in the kernel elf headers at
> >>> link time.
> >> 
> >> My question really boils down to whether PIC techniques
> >> are sufficient for the early bootstrap stage to determine
> >> where the kernel is currently executing and use that to
> >> drive the initial MMU bring up.  I've just started, but
> >> the PHYSADDR uses I've examined can be replaced
> >> with PIC techniques.  But this part of the code is
> >> pretty involved and riddled with conditional compilations,
> >> so it will be slow going.
> >> 
> >> I was impressed to find that ubldr seems to be PIC.
> >> I've run the same binary at different load addresses
> >> and so far it "just works."  (I didn't think it would work,
> >> so I was surprised by this.  I haven't dug through to
> >> figure out why it works yet.)
> >> 
> > 
> > I was suprised by this paragraph, and I've just done some testing and I
> > wonder if it's really running at different addresses, because I can't
> > make it do so without relinking it at that address.  To test, I saved
> > the entry PC in uboot/start.S and printed it in main (patch below).  No
> > matter where I tell u-boot to load ubldr, it seems to ignore the command
> > line and honor the elf headers:
> 
> I'm testing on Raspberry Pi, whose initial memory map is
> from 0x000000000 - 0x20000000 and BeagleBone, whose
> initial memory map is 0x80000000 - 0x90000000, so there's
> no way that ubldr can be getting copied to the same address
> on both platforms.
> 
> I'll have to go back and repeat my tests, because something
> is clearly not making sense here.

Yeah, something's not right.  I've never gotten ubldr to work on my BB
at all, I just directly load the kernel from u-boot.  Getting ubldr
going was on my to-do list, so I just played with it now.

u-boot says it loads ubldr to 0x82000000, then when I 'bootelf' it just
hangs.  If I re-link ubldr for an address in the 0x80000000+ range it
loads and launches just fine (but then fails to load the kernel via the
network, but that's just an unrelated problem I think).

What does a "readelf -l" show for your ubldr?  Is there any difference
in what it shows between the ones built for rpi and bb in your setup?
(I don't use your build scripts.)

-- Ian




More information about the freebsd-arm mailing list