Before you change the default logo, make sure you have the Linux logo enabled: under the “Linux Kernel Configuration” menu go to “Device Drivers->Graphics support->Bootup logo”.
In my case, on the iMX53 QSB, I have the “Standard 224-color Linux logo” checked. You can also select the monochrome or the 16-color one, but you will need to play with the settings of the “ppmquant” command noted below.
Good bet is that if you did see Tux booting your custom uImage before, chances are that you already have everything that you need enabled. I am not going to go into details of how to enable/troubleshoot the u-Boot video driver and/or the kernel video output, because is beyond the scope of this note.
You will need your custom image or logo in PPM format. I personally like using GIMP2 (GNU Image Manipulation Program 2) to do my images.
Save the image in PPM binary format. I named mine “logo.tmp”.
Next, you need to adjust number of colors to be at 224 using “ppmquant”. If you want to use 16 colors you will need the palette file “clut_vga16.ppm” located in “<install directory>/ltib/rpm/BUILD/linux/drivers/video/logo” along with your logo.
Convert the temporary PPM binary image in 224 color binary PPM:
ppmquant 224 logo.tmp > logo_224.tmp
The image needs converted now to ASCII format and it is ready for compiling:
pnmnoraw logo_224.tmp > logo_linux_clut224.ppm
Now copy “logo_linux_clut224.ppm” into “<install directory>/ltib/rpm/BUILD/linux/drivers/video/logo” overwriting the existing default file.
Make sure you successfully recompile your kernel. The Linux kernel make process should take care of converting your ASCII PPM 224 color logo into a C source file and compile/link it.
I have experimented with different size images and so far I had no trouble displaying them all. One caveat though: if you have a big image, make sure that you partition your SD card properly to accommodate the size increase of your uImage file.