Linux kernel presents in different forms depending on the actual context.
vmlinux, the name comes from the fact that “linux” supports virtual memory. It is typically in ELF format, created by linker. This file is needed when debugging kernel. In order to boot linux kernel, vmlinux image has to be transformed into different from based on processor type.
this is binary form of kernel image, which is created by using objdump from vmlinux image.
This is bootable image for x86 processor. The following picture well describe the actaul content of bzImage.
It contains concatenated bootsect.o + setup.o + misc.o + piggy.o
This is bootable image for a processor, which uses u-boot as bootloader. THe processors are like ARM (32-bit), PowerPC, MIPS.
There is a utility tool “mkimage” to transform vmlinux into uImage. The uImage has the following header in the beginning of image.
This a relatively new format for ARMV8 64-bit processor. It can also created by using “mkimage” tool.