Originally Posted by knc1
The u-boot bootable kernels are one of several formats that the kernel build system can turn out plus a "u-boot header".
The u-boot flash header is built from the "flash_header.S" source module, and it is a USB Downloader plug-in flash header that includes code to initialize DRAM and conditionally find and excecute the payload that was relocated to DRAM, as I recall. The procedure is documented in the i.MX50 Reference Manual.
The Linux Kernel (and other) flash partitions each contain a flash header that is very different from the "plug-in" flash header, and these flash headers serve a different purpose. They include the length of the kernel, and although I have not studied their layout, it appears that they may also contain a CRC32 of the partition.
This explains why fastboot CRC partition checks fail after the partition contents have changed. Writing to a mounted mmc filesystem does not update the flash header CRC. Likewise, after a firmware update, the kernel image can also change, invalidating its flash header CRC.
The point of my reply is that there are two different things here that are called "flash headers" in the code and documentation, and they are not the same and must not be confused with each other.