boot.axf is the final allwinner bootloader. It can either load a u-boot image, or a stripped linux kernel directly, called bImage by the build scripts. Manually building is possible using arm-linux-gnueabi-objcopy -R .note.gnu.build-id -S -O binary vmlinux output/bImage for example.
Boot partition structure
The default structure of the boot-partition, which boot.axf uses to load various data from. An example layout can be found on github.
The booting configuration is defined by the ini-file linux/linux.ini:
[segment] img_name = c:\linux\bImage img_size = 0x2000000 img_base = 0x40008000 [segment] img_name = c:\linux\params img_size = 0x100 img_base = 0x40000100 [script_info] script_base = 0x43000000 script_size = 0x10000 [logo_info] logo_name = c:\linux\android.bmp logo_address = 0x48000000 logo_show = 1
Note: yes, they actually use DOS paths and partition names, and most likely internally translate those.
boot.axf can also "chainload" u-boot, replacing the bImage portion by:
[segment] img_name = c:\linux\u-boot.bin img_size = 0x80000 img_base = 0x4a000000
This is what is done on ICS firmwares on tablets, where what is booted is an Android boot.img by u-boot.
There is a source tree for building boot.axf available at this repository. Use at your own risk, as it's very obscure and not well known.