In the intel x86 architecture the boot loader is called from BIOS. It then loads the kernel into RAM, from the filesystem, and execute the kernel. At this point the kernel has control and accesses the filesystem. On an intel architecture you need only place the boot loader on the boot sector of the hard drive and have an accessible filsystem.
On the ARM there is no BIOS, and no delay for the POST. There is also no harddrive. So the first thing to run is the boot loader, which then loads the kernel directly from flash (and not off of a filesystem). The boot loader passes execution to the kernel. The kernel then accesses the filesystem and things are pretty similar to an x86 boot sequence from there.
The other important difference between the intel world and the ARM world is that the bootloader is also used to transfer the OS image onto the flash device.
To complicate things just a little bit, there are two flash devices on the mini2440, both of which have a bootloader. There is the NOR chip and the NAND chip. At first this seemed like an unnecessary complication.
The reality is that having two memory devices is a powerful safety net. I use the NOR bootloader exclusively to load the kernel and filesystems onto flash. And I use the NAND bootloader only to manipulate the NOR bootloader or to load software directly into RAM. It should be nearly impossible to "brick" the mini2440 using this technique.
The mini2440 seems to have two primary bootloaders. The supervivi which shipped on mine, and a boot-loader called uboot.
I don't recommend touching the bootloader on the NOR device. If you need functionality of the uboot boot loader (such as to rebuild the back block table) it is trivial to use supervivi to load the uboot boot loader into RAM and execute it directly. Replacing the NOR boot loader opens the door to bricking your machine.
I loaded uboot at some point, and then reverted to supervivi. However images didn't work as expected after I had switched back to supervivi. I found a procedure that works perfectly.
Evidently before you load a linux kernel with the uboot bootloader, one must convert it to a uImage file. The supervivi on the otherhand expects a plain old zImage file. Compiling uboot from source also compiles the zImage -> uImage conversion utility. Your choices are, install the uboot bootloader from source or switch bootloaders based on the kernel type. I chose to switch bootloaders for now.
Last modified: Mar 21, 2010