Boot Process

Our SoCs have a very specific boot process. First it executes a tiny on chip rom (BROM) which then checks the buttons for FEL mode and then starts checking the various storage options for a valid boot signature at the right location.

Generally, the BROM first check SD-card boot availability, then in second, NAND one.

There is no real difference between NAND and an SD-card apart from the fact that directly attached flash use the Sunxi NAND controller directly while SD-Cards come with a standard interface and an embedded controller. The sunxi nand controller is harder to implement than the sunxi sd-card controller, and the sample code provided by allwinner is rather large (and shared between U-boot and the kernel). Check their respective article to have more detail about boot process on each one.

= A10 Boot overview = While the Allwinner series of SoC's are quite open, there is an unmodifiable ROM called BROM or Boot ROM that is in charge of booting the SoC. The BROM will try to load the SPL from U-Boot, which in turn loads the kernel.

It should be noted, that if using Allwinner bootloaders (especially true when booting from nand storage), the order is slightly different. BROM loads boot0 as its SPL and that chainloads boot1. These all reside in unaccessable (not easily anyway) nand flash, before the partition table. boot1 loads boot.axf from the first fat partition which in turn chainloads (in our case) u-boot and then the kernel. It is in theory possible to directly boot the kernel, or some other OS. Also boot.axf has the ability to display images on the framebuffer.