The prm contains:
> EXTERNAL_EEPROM = NO_INIT 0x400000 TO 0x407FFF;
This snippet has 2 issues. First, and that the issue you are struggling with, the NO_INIT keyword tells the linker to drop all the initialization data.
If you want the content of the EXTERNAL_EEPROM to appear in the elf (and in the srecord), use READ_ONLY instead.
READ_ONLY as keyword is actually a bit unfortunate as it does not really mean that those areas cannot be written to. Instead for the linker it means that the data is initialized when downloading. So typically this is used for flash areas, but for debug in RAM setups it is not uncommon to use READ_ONLY areas in RAM.
The second issue is the address 0x400000. For the HC12 linker that's a paged address, with the page being bits 16..23 of the address (0x40) and the base address 0x0000, which is not a paged address usually.
I guess this is for the external address space? If so use 0x400000'G (global addressing) instead. I have to admit that I did not use that in the past (or now), so no experience from my side here.
So it should probably read:
> EXTERNAL_EEPROM = READONLY 0x400000'G TO 0x407FFF'G;
Daniel