- I'm trying to port U-Boot to a new board and the linker throws an error message like this:
board/<your_board>/u-boot.lds:75 cannot move location counter backwards (from 00000000b0008010 to 00000000b0008000)
- Check your linker script
board/your_board/u-boot.ldswhich controls how the object files are linked together to build the U-Boot image.
It looks as if your board uses an "embedded" environment, i. e. the flash sector containing the environment variables is surrounded by code. The
u-boot.ldstries to collect as many as possible code in the first part, making the gap between this first part and the environment sector as small as possible. Everything that does not fit is then placed in the second part, after the environment sector.
Some your modifications caused the code that was put in this first part to grow, so that the linker finds that it would have to overwrite space that is already used.
Try commenting out one (or more) line(s) before the line containing the
"lib_generic/zlib.o"is usually a good candidate for testing as it's big ]. Once you get U-Boot linked, you can check in the
u-boot.mapfile how big the gap is, and which object files could be used to fill it up again.
|14.2.8. Decoding U-Boot Crash Dumps||1. Abstract||14.2.10. U-Boot Doesn't Run after Upgrading my Compiler|