Purpose of ARM Linker Files
To compile from C code to an executable image that you can run on an ARM microcontroller, there are two steps: compile, and link.

During compile, the C code will ultimately be turned into object code, which is not usable on its own. In the middle of the process, you may be able to generate intermediate assembly listings for the C files.

During link, the object files will all be combined together and the function calls and global variables will be linked. It also decides where in the target's memory space everything will end up (code, read only data, read/write data).

This is how you can call something like printf without having the code in your file. When you compile, it doesn't know anything about printf except for the prototype in stdio.h. When linked, the linker will fill in the details about where printf actually lives in memory.

The linker uses a scatter file to know where in the target certain memory areas exist. Typically a microcontroller will map internal Flash to address 0x00000000. Internal SRAM will exist at some other address, say 0x20000000, and external DRAM or Flash could exist at another address, 0x80000000. The scatter file will inform the linker of these areas and direct it to place certain sections of the output in certain areas. Typically, your executable code lives in the text section, which would typically be stored in your internal flash. Your read only data would live in the section called rodata and also be stored in flash. Read/write data will typically be in bss (initialized to zero) or data (initialized with value), and this would be placed in RAM, with initialized values being stored in another section in flash.

These section names are somewhat toolchain specific, though they are usually similar across tools.

The linker map file is an output file that tells you after linking where all your symbols have ended up. For example it may tell you that main() has been located at 0x00000278 in Flash, and that the global variable int x has been located at 0x20001012 in RAM. It will also tell you where linker-generated sections have been placed. These include your C stack, potentially an interrupt stack, and also possibly a heap. The scatter file usually allows you to specify the size of these sections as well.