Modern CPUs are quite complicated beasts. They have peripherals, memory controllers, memory management units and a whole lot more that needs to be set up so that a stdout, stdin and more is defined and usable. This hardware dependent setup is done during the boot process. For most embedded systems this is done by the bootloader, which hands the system off to a properly configured kernel. I'd like to explore how this works in detail.