uboot/doc/README.displaying-bmps
<<
>>
Prefs
   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