cmake: support ELF image adjustment
This commit adds support for adjust the addresses of the final image.
This is useful when the image is to be flashed at a location different
from the LMA address encoded in the ELF file by the linker.
An example use-case is multicore systems where core A might load image
from a flash partition into RAM in order for core B to execute and load,
but where the image itself is build with the RAM addresses as LMA.
It updates the zephyr_image_info.h header with information of adjustment
value.
Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
diff --git a/Kconfig.zephyr b/Kconfig.zephyr
index 9d43b6b..ecc92df 100644
--- a/Kconfig.zephyr
+++ b/Kconfig.zephyr
@@ -494,6 +494,30 @@
Build a stripped binary zephyr/zephyr.strip in the build directory.
The name of this file can be customized with CONFIG_KERNEL_BIN_NAME.
+config BUILD_OUTPUT_ADJUST_LMA
+ string
+ help
+ This will adjust the LMA address in the final ELF and hex files with
+ the value provided.
+ This will not affect the internal address symbols inside the image but
+ can be useful when adjusting the LMA address for flash tools or multi
+ stage loaders where a pre-loader may copy image to a second location
+ before booting a second core.
+ The value will be evaluated as a math expression, this means that
+ following are valid expression
+ - 1024
+ - 0x1000
+ - -0x1000
+ - 0x20000000 - 0x10000000
+ Note: negative numbers are valid.
+ To adjust according to a chosen flash partition one can specify a
+ default as:
+ DT_CHOSEN_IMAGE_<name> := <name>,<name>-partition
+ DT_CHOSEN_Z_FLASH := zephyr,flash
+ config BUILD_OUTPUT_ADJUST_LMA
+ default "$(dt_chosen_reg_addr_hex,$(DT_CHOSEN_IMAGE_M4))-\
+ $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_FLASH))"
+
config BUILD_OUTPUT_INFO_HEADER
bool "Create a image information header"
help