The relevant u-boot code from a recent update package is as follows:
uplg=echo =============oem(logo.bmp)===============;if ${loadcmd} ${interface} ${devpart} 0x83000000 ${filedir}/logo.bmp;bmpload ${loadaddr} 0x83000000;then mmc write ${loadaddr} ${oem_start} ${oem_size};mw.b ${loadaddr} 0x0 ${filesize};else setenv up_flag 0;fi;What's happening here is that the logo.bmp file is being loaded to an extra temporary address (
0x83000000), and then the
bmpload command extracts the RGB data from it and writes it to the "normal" temporary address (
${loadaddr}) used by the other stanzas of the script, and then the data at that temporary address is dumped to the partition. So when my logo got messed up, the
bmpload command will have stripped out the BMP file header where the dimensions are stored, explaining the "interlacing."
I don't need the a raw .BMP file, just the contents of the oem partition. (The one which is 5MiB long, starts at 10MiB from the start of the disk, and has GUID
272fa41c-7c22-454e-8bf7-8d6d150de04b.) From what I saw, the USB recovery package doesn't touch this partition, and none of the firmware updates (are supposed to) touch it either, so I'm skeptical that going through
@tautech's suggested process will help. I'll try, though.