Storing values in the internal flash memory
How to reserve this space in the linker file of my microcontroller (ARM Cortex-M4 2MB flash)?


As each linker brand uses it's own linker file format, it's impossible to answer without knowing which toolchain are you using. Generally, look into the linker file, find the flash size (usually at the top), and subtract the size of a few erase blocks.


  How to implement the circular FIFO fashion?


The internal flash can be programmed in 8 byte blocks, and erased in 2 kByte blocks. When erased, the contents are set to 0xFF.

Arrange your data in 8 or 16 byte structs, and just start filling the reserved space, and erase the next block. Simply wrap around at the end of the flash. Ensure that a struct with all 0xFF bytes doesn't represent valid data (should be no problem if your timestamp structure can cover at least a few centuries). At powerup, just look for the first invalid record following a valid one to find the head.

Keep in mind that the internal flash is rated only for 10000 erase operations, although it shouldn't be a problem at one sample every 15 minutes.