There are 2 types of apps in the EC:
- main app
- Scratch ROM apps
The Scratch ROM apps are built and embedded into the main app using a hack: their binary is converted to hex using xxd and then included as a byte array at the desired address.
|
// Include scratch ROM |
|
uint8_t __code __at(SCRATCH_OFFSET) scratch_rom[] = { |
|
#include <scratch.h> |
|
}; |
|
// Include flash ROM |
|
uint8_t __code __at(FLASH_OFFSET) flash_rom[] = { |
|
#include <flash.h> |
|
}; |
Rework the toolchain usage to support building multiple apps, with their own compiler and linker flags, at specific base addresses. This requires compiling them in their own segment that can then have its start address set (-Wl -b<SEG>=<ADDR>).
Ref: SDCC Manual, 3.3.5 Linker Options
There are 2 types of apps in the EC:
The Scratch ROM apps are built and embedded into the main app using a hack: their binary is converted to hex using
xxdand then included as a byte array at the desired address.ec/src/board/system76/common/scratch.c
Lines 13 to 16 in a5e34b5
ec/src/board/system76/common/flash/wrapper.c
Lines 13 to 16 in a5e34b5
Rework the toolchain usage to support building multiple apps, with their own compiler and linker flags, at specific base addresses. This requires compiling them in their own segment that can then have its start address set (
-Wl -b<SEG>=<ADDR>).Ref: SDCC Manual, 3.3.5 Linker Options