[U-Boot] [PATCH] arm: Add option to disable code relocation
Dirk Behme
dirk.behme at de.bosch.com
Tue Feb 7 07:51:22 CET 2012
On 06.02.2012 22:17, Albert ARIBAUD wrote:
> Le 06/02/2012 20:27, Mike Frysinger a écrit :
>> On Monday 06 February 2012 09:49:27 Tom Rini wrote:
>>> On Mon, Feb 6, 2012 at 1:43 AM, Graeme Russ wrote:
>>>> On 02/06/2012 06:51 PM, Wolfgang Denk wrote:
>>>>> Graeme Russ wrote:
>>>>>> I think the immediate focus should be on centralising the init sequence
>>>>>> processing into /common/init.c and then bringing the new'initcall'
>>>>>> architecture online
>>>>> Agreed.
>>>>>
>>>>>> Once these have been done, any board can just specific:
>>>>>>
>>>>>> SKIP_INIT(RELOC)
>>>>> I will probably object to his, too - for the same reasons.
>>>> Considering this is a 'free' artefact of how the init sequence functions,
>>>> and that it is board specific and totally non-invasive for anyone else
>>>> (i.e. no ugly ifdef's anywhere else in the code) I'm surprised you would
>>>> object...
>>> To pick up Wolfgang's argument, but why do we want to skip relocation?
>>> You can debug through it, it's documented (official wiki has GDB,
>>> over in TI-land, the wiki page for CCS has the bits for doing it in
>>> that Eclipse-based env, other debuggers I'm sure have a similar "now
>>> add symbols at this offset from link" option) and the end result makes
>>> it very easy for end-users to break their world (default kernel load
>>> addrs being where U-Boot would be).
>> if you have a static platform which never changes, isn't the relocation a
>> waste of time ? i can understand wanting relocation by default for platforms
>> where memory sizes are unknown, but it's not uncommon for people to have fixed
>> hardware when they deploy.
>
> Relocation may not be a waste of time if the static platform boots
> U-Boot from NOR, as relocation will be needed to move U-Boot to RAM in
> working order.
>
> Now if the platform is static and has a preloader of sorts, then one can
> predict (or just observe) where U-Boot would want to relocate, and set
> the preloader once and for all (for a given release of U-Boot, that is)
> to load U-Boot directly at that address. U-Boot will skip copy and
> relocation if it already resides at the right address.
For the i.MX6 preloader, i.e. the i.MX6 boot ROM, the issue I observed
is that the copy *and* relocation will be skipped [1]. The skipped copy
is fine, skipping the relocation breaks things, though:
Getting the address where U-Boot will relocate to, and setting this as
CONFIG_SYS_TEXT_BASE will result in skipping the copy. Fine. But the
whole 'fix .rel.dyn relocations' in e.g. arch/arm/cpu/armv7/start.S is
skipped, too. And this breaks things.
Best regards
Dirk
[1] http://lists.denx.de/pipermail/u-boot/2012-February/117134.html
More information about the U-Boot
mailing list