normally in embedded uboot is the bootloader. and to trace this is simple:
a. understand how uboot works - and this is highly platform specific (uboot is highly hardware dependent)...and examine the point where control passed is passed to kernel image file (which still run at 16 bit real mode), and from there u can trace everything.
b. well u need assembly, as everything starting is written in assembly. for ARM (as u asked for Android), the place is "start_kernel" inside:
arch/arm/kernel/head-common.S
and then u must learn linker scripting (for ARM is arm/kernel/vmlinux.ld.S) as well, that is how u tell the compiler to generate a image that can be loaded directly into memory and executed directly on the hardware in memory - using the hardware-specific reset vector as the starting point. there is no loader at this stage to load the binary. (uboot will load it as a image, but executeable).
the rest is yours...