How to write a bootloader from scratch (2019)
interrupt.memfault.com
interrupt.memfault.com
Even if you regularly write embedded code for Cortex-M MCUs, scroll through their list of posts and you'll find several that will teach you something new and useful.
From zero to main(): How to write a bootloader from scratch - https://news.ycombinator.com/item?id=24635383 - Sept 2020 (44 comments)
Also asked the author here: https://mobile.twitter.com/kaycebasques/status/1585708384531...
E.g. you aren't going to go into power savings mode during boot, nor are you going to initialize peripherals (because their contexts will be lost once you jump to the application).
Initializing assymetric processors can be done in application space with a variety of tools (AMP) as well. I haven't seen a need to initialize them during bootloader1 phase, but there are lot of use cases.
Kinda know what bootloader is. And, while I don't care about the naming, I know several people who would vehemently disagree with you that grub is not a bootloader. They'd say that only grub is a bootloader, and anything else running prior to that is platform firmware.
Cortex-A is not typically used in MCUs, so I don't see what you mean by "The MCU is the first thing to boot".