Lets take an example of porting linux on beaglebone through mmc.,
You get the idea of boot process. It works like this -
- First when we power on the board the bootrom code executes(Hard coded in the rom of board) and initialize the CPU, disable MMU.
- after executing boot-ROM code it jumps to MLO (X-loader with header, it is board specific) and load it.
- MLO executes and load the Uboot it is board specific and all peripherals are initialized here.
- Now the Uboot executed and looking for bootcmd where the Kernel and rootfs addressed(in mmc). this calls the kernel
- Kernel extracted and than it calls the initramfs (root file system)
Actually user can not interact with hardware by Kernel only thus the rootfs gives user inerface to the kernel to run application.