Wednesday, 25 July 2018

How To Use a Custom Boot Logo / Splash Screen

If you would like to display a custom logo on the frame buffer of your board as the Linux kernel is booting, follow these instructions after you have a successful desktop factory build.

Prerequisites

  • Linux host with the GIMP Image Editor and netpbm utilities installed: On Ubuntu/Debian:
    sudo apt-get install gimp netpbm

    In Fedora/CentOS:
    sudo yum install gimp netpbm netpbm-progs

Limitations

  • The Boot Logo is limited to 224 colors. You can start with an image with more, but the ppmquant step will reduce the image to 224 colors.
  • The logo will be displayed relative to the upper left hand corner of the screen.

Method

  1. Run the GIMP image editor. It can be started on the command line with:
    gimp
  2. Open your logo image and scale it to fit your frame buffer. Some common frame buffer sizes are 320x240 and 480x272.
  3. Save the image as logo.ppm, when prompted for a format, choose raw.
  4. Run the following commands in the same directory you saved your logo.ppm:
    ppmquant 224 logo.ppm > logo_224.ppm
    pnmnoraw logo_224.ppm > logo_final.ppm
    
  5. Copy the resulting logo_final.ppm to your kernel source directory replacing the default boot logo. If you are using the default Timesys kernel, this will be located at </path/to/your/factory>/build*/linux-<version>/drivers/video/logo/logo_linux_clut224.ppm
  6. If you are using an external kernel, the path from drivers/ is the same.
  7. Rebuild your kernel image by running
    rm build_*/linux-<version>/.stamp_image_built && make

    from your factory directory and boot the resulting kernel image on your board.

Troubleshooting

My logo doesn't display

  • Make sure framebuffer support and boot logos are enabled in your kernel configuration. These options can be found in Device Drivers -> Graphics Support
  • Make sure that the framebuffer console (Device Drivers -> Graphics Support -> Console display driver support -> Framebuffer Console support) is enabled in your kernel configuration.
  • Check dmesg for the following message: boot-logo bigger than screen. Try using a smaller image. You are limited by the size of your framebuffer- the kernel will not resize for you. The default logo size is 80x80, so if you are having difficulty sizing, try that first.
  • If your image is divisible by 8, but not by 16, then you need to disable the high resolution VGA console fonts (CONFIG_FONT_8x16) in your kernel configuration, and rebuild. In general, your image should be divisible by the VGA console font size of your system for best results.
    1. Enable Device Drivers -> Graphics Support -> Console display driver support -> Select compiled-in fonts
    2. Disable every option beneath that, except for Device Drivers -> Graphics Support -> Console display driver support -> VGA 8x8 font

The wrong logo is displayed

  • If your kernel shows the Timesys boot logo rather than the default penguin, you will need to de-select the Timesys boot logo option in the kernel-menuconfig interface at:
    Device Drivers->Graphics Support->Bootup logo->224-color TimeSys Linux logo

No comments: