1If you are experiencing hangups/data-aborts when trying to display a BMP image, 2the following might be relevant to your situation... 3 4Some architectures cannot handle unaligned memory accesses, and an attempt to 5perform one will lead to a data abort. On such architectures it is necessary to 6make sure all data is properly aligned, and in many situations simply choosing 7a 32 bit aligned address is enough to ensure proper alignment. This is not 8always the case when dealing with data that has an internal layout such as a 9BMP image: 10 11BMP images have a header that starts with 2 byte-size fields followed by mostly 1232 bit fields. The packed struct that represents this header can be seen below: 13 14typedef struct bmp_header { 15 /* Header */ 16 char signature[2]; 17 __u32 file_size; 18 __u32 reserved; 19 __u32 data_offset; 20 ... etc 21} __attribute__ ((packed)) bmp_header_t; 22 23When placed in an aligned address such as 0x80a00000, char signature offsets 24the __u32 fields into unaligned addresses (in our example 0x80a00002, 250x80a00006, and so on...). When these fields are accessed by U-Boot, a 32 bit 26access is generated at a non-32-bit-aligned address, causing a data abort. 27The proper alignment for BMP images is therefore: 32-bit-aligned-address + 2. 28