To complement the
U-Boot Splash Screen feature the
new configuration option
"CONFIG_FB_PRE_INIT_FB"
was added to the
Linux kernel. This allows the Linux kernel to skip certain parts of the framebuffer initialization and to reuse the framebuffer contents that was set up by the U-Boot firmware. This allows to have an image displayed nearly immediately after power-on, so the delay needed to boot the Linux kernel is masked to the user.
The current implementation has some limitations:
- We did not succeed in reusing the previously allocated framebuffer
contents directly. Instead, Linux will allocate a new framebuffer,
copy the contents, and then switch the display. This adds a minimal
delay to the boot time, but is otherwise invisible to the user.
- Linux manages its own colormap, and we considered it too much effort
to keep the same settings as used by U-Boot. Instead we use the "trick"
that U-Boot will fill the color map table backwards (top down). This works
pretty well for images which use no more than 200...255 colors.
If the images uses more colors, a bad color mapping may result.
We strongly recommend to convert all images that will be loaded
as Linux splash screens to use no more than 225 colors. The "ppmquant"
tool can be used for this purpose
(see Bitmap Support in U-Boot for details).
- Usually there will be a Linux device driver that is used to adjust the
brightness and contrast of the display. When this driver starts, a visible
change of brightness will happen if the default settings as used by U-Boot
differ.
We recommend to store settings of brightness and contrast in U-Boot
environment variables that can be shared between U-Boot and Linux. This
way it is possible (assuming adequate driver support) to adjust the
display settings correctly already in U-Boot and thus to avoid any flicker
of the display when Linux takes over control.