
Dear Alessandro Rubini,
In message 20100916062347.GA25290@morgana.i.gnudd.com you wrote:
One of the things I love(d) with u-boot (at least the ARM one) is that I could place it in flash at any address and it would just work. So when I have a new binary I first write it to another flash sector and "go" to it. Only if it works I flash at offset 0. Sure I test in RAM
This may, or may not work. In general you have to be lucky if it does work. Many processors have steps in their initialization sequence which cannot be repeated easily, at least not without a reset.
first, but since writing the ram image to flash is not uncommon, the final test for me has always been in flash -- also for other reasons.
Even if it works, this is not, and cannot be, any guarantee that the image would run when started out of reset. On contrary, on many processors you will have to modify the code so that it can be started on an already running system.
Is there any chance we could go on testing on a different flash address without relinking in-between (with the risk of mismatching the two images?)
I don't understand why you think this could (or should) be working?
We have a static configuration with CONFIG_SKIP_LOWLEVEL_INIT (and CONFIG_SKIP_RELOCATE_UBOOT); if CONFIG_SKIP_LOWLEVEL_INIT is not set, starting another U-Boot instance with "go" would repeat the whole low-level initialization which _will_ break on many systems.
I agree that it would be nice to have U-Boot completely position- independent and completelky restartable, but this would be a new feature, which newer existed before.
Best regards,
Wolfgang Denk