Kernel Splash Screen Solution for Verdin iMX8MP
You’re correct about the U-Boot splash screen limitations on the Verdin iMX8MP. Based on the community discussions, there are known issues with U-Boot splash screens on iMX8-based modules (1)(2).
Recommended Approach: Framebuffer-Based Splash Screen
Since U-Boot splash screen support is limited on your platform, you should implement a kernel-level framebuffer splash screen instead. The documentation provides guidance on using the framebuffer console for early display output (3).
Implementation in Your Custom Layer
Here’s how to add a framebuffer-based splash screen to your existing custom layer:
1. Create a Splash Screen Recipe
Create a new directory in your meta layer:
recipes-graphics/splash-screen/
├── files/
│ └── splash-logo.bmp # Your logo file
└── splash-screen_1.0.bb
2. Splash Screen Recipe (splash-screen_1.0.bb)
SUMMARY = "Custom splash screen for kernel framebuffer"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://splash-logo.bmp"
S = "${WORKDIR}"
do_install() {
install -d ${D}/usr/share/pixmaps
install -m 0644 ${WORKDIR}/splash-logo.bmp ${D}/usr/share/pixmaps/splash-logo.bmp
}
FILES:${PN} = "/usr/share/pixmaps/splash-logo.bmp"
3. Update Your Kernel Configuration
Add to your recipes-kernel/linux/linux-toradex/fast-boot.cfg:
# Enable framebuffer console for splash
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FB=y
CONFIG_FB_SIMPLE=y
# Enable logo support
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
# Disable printk but keep framebuffer
CONFIG_PRINTK=n
CONFIG_EARLY_PRINTK=n
4. Modify Your Kernel bbappend
Update your recipes-kernel/linux/linux-toradex_%.bbappend:
FILESEXTRAPATHS:prepend := "${THISDIR}/linux-toradex:"
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI += "\
file://fast-boot.cfg \
file://verdin-imx8mp-qmi.cfg \
file://ppp.cfg \
"
KERNEL_CONFIG_FRAGMENTS += "fast-boot.cfg verdin-imx8mp-qmi.cfg ppp.cfg"
# Keep your silent boot args but allow framebuffer console
APPENDARGS += " quiet loglevel=0 logo.nologo=0 vt.global_cursor_default=0 vt.default_redraw=0 console=tty0"
RDEPENDS:${KERNEL_PACKAGE_NAME}-base += "splash-screen"
5. Framebuffer Console Configuration
The documentation explains that the framebuffer console is initialized early during boot and can display content before the full graphics stack loads (3). You can configure it using kernel parameters:
- Remove
logo.nologoor set it tologo.nologo=0to allow kernel logo display - Use
console=tty0to enable framebuffer console output - The
fbcon=map:parameter can redirect console output to specific framebuffer devices (3)
Alternative: Cairo-based Early Splash
For more control, you could implement a simple Cairo-based splash application that runs very early in the boot process. The documentation provides a complete Cairo framebuffer example (3):
#include <cairo/cairo.h>
#include <linux/fb.h>
// ... (rest of the Cairo framebuffer code from documentation)
Key Points
- Framebuffer Console: The kernel framebuffer console initializes early and can display content before userspace graphics (3)
- Logo Display: Enable
CONFIG_LOGO=yand related options to show a kernel logo during boot (3) - Console Redirection: Use
console=tty0to ensure framebuffer console is active while keeping serial console quiet (3)
This approach will give you a logo display during the kernel boot phase, which is exactly what you need to replace the blank screen during your silent boot configuration.
Best regards, Toradex AI Assistant.
If I answered your question, please tick the “Solution” checkbox.
For follow-up questions to me, please use @ToradexAI in your post.