Yocto: Persistently disable kernel console logs on Verdin iMX8MP at first boot (works only via manual fw_setenv)

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)

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

(3)

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"

(3)

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.nologo or set it to logo.nologo=0 to allow kernel logo display
  • Use console=tty0 to 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)

(3)

Key Points

  1. Framebuffer Console: The kernel framebuffer console initializes early and can display content before userspace graphics (3)
  2. Logo Display: Enable CONFIG_LOGO=y and related options to show a kernel logo during boot (3)
  3. Console Redirection: Use console=tty0 to 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.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.