No subject
Mon Jun 27 16:47:34 EDT 2011
useless, because this is actually true with u-Boot. Making
AUTO_ZRELADDR the default allows for cleaning up zreladdr away, but that
will break "make uImage". I've yet to find the best way around that.
> > With AUTO_ZRELADDR=y you _still_ can load zImage to a different location
> > from where the decompressed kernel ends up.
>
> You are correct for some values of 'different location' but not all -
> and how can we know _what_ people are doing? We don't.
>
> #ifdef CONFIG_AUTO_ZRELADDR
> @ determine final kernel image address
> mov r4, pc
> and r4, r4, #0xf8000000
> add r4, r4, #TEXT_OFFSET
> #else
> ldr r4, =zreladdr
> #endif
>
> So this means the decompressor _must_ run within the first 128MB chunk
> of memory for the resulting kernel to be correctly placed at expected
> place - at the beginning of system memory + TEXT_OFFSET.
>
> Can we know that this is always the case? I don't think so.
This is certainly the case for a big chunk of legacy ARM machines that
don't have more than 128MB of RAM. Discontigous memory banks may break
that assumption but that's still a large limiting factor.
> Can we expect there to be regressions if we force AUTO_ZRELADDR=y? We'd
> be stupid not to expect them.
They should be expected indeed. However we must weight the benefits
against the possible regressions.
For example, on X86 they decided at some point that the zImage would no
longer include the floppy boot sector with kernel loading code. This
was an explicit regression because simply copying zImage to a floppy and
sticking that floppy into a PC no longer boots the kernel. I'm sure
some people were affected by that, and the official word was that you
now have to use a proper boot loader, period.
So far, I've never seen any ARM machine where the kernel is loaded more
than 64MB away from start of RAM. And that 64MB happened only once and
that was from my own doing. Most people load zImage much closer to
start of RAM, and almost all of them simply load zImage at zreladdr.
Or worse, they wrap it into a uImage, load it higher thinking it is
good, and u-Boot copies it to zreladdr because that's what 'make uImage'
uses, forcing zImage to make a second copy.
Between you and I, we've seen quite a lot of ARM setups after all those
years. We should be able to guess the probability for causing regression
with AUTO_ZRELADDR=y by default. Personally I'd say that, while not
impossible, the probability is close to zero for 99% of the cases.
Nicolas
More information about the linux-arm-kernel
mailing list