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

Hi @ToradexAI and Toradex Team,

I am working with Verdin iMX8MP using TDX Wayland with XWayland (Scarthgap, 7.5.0-devel) and I am trying to disable kernel console logs permanently at OS flash / first boot time using Yocto, not by running commands manually after boot.

Problem Statement

  • Disabling kernel console logs works correctly when done manually on the device using fw_setenv
  • None of the Yocto-based approaches (local.conf, U-Boot bbappend, kernel bbappend) are reflected in /proc/cmdline after flashing the image
  • The device always boots with the following kernel arguments:
console=tty1 console=ttymxc2,115200

What Works (Manual on Device)

The following commands successfully disable kernel console output after reboot:

fw_setenv console
fw_setenv stdout
fw_setenv stdin
fw_setenv stderr
fw_setenv defargs ""
fw_setenv tdxargs "quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0"
fw_setenv bootargs '${defargs} ${tdxargs}'
reboot

Result:

cat /proc/cmdline
root=PARTUUID=... ro rootwait quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0

What Does NOT Work (Yocto Build Time)

1. local.conf

UBOOT_ENV = ""
UBOOT_ENV_FORCE = "1"

TDX_KERNEL_ARGS:remove = "console=tty1"
TDX_KERNEL_ARGS:remove = "console=ttymxc2,115200"
TDX_KERNEL_ARGS:append = " quiet loglevel=0 logo.nologo vt.global_cursor_default=0"

No effect on /proc/cmdline.

2. U-Boot bbappend (custom meta layer)

silent.env.txt

bootdelay=0
console=
stdin=
stdout=
stderr=
defargs=
tdxargs=quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0

u-boot-toradex_2024.07.bbappend

SRC_URI += "file://silent.env.txt"
UBOOT_ENV = "silent.env"
UBOOT_ENV_FORCE = "1"

The environment files are generated, but U-Boot still injects console arguments at boot.

3. Kernel bbappend

APPENDARGS += " quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0"

Kernel arguments are ignored because U-Boot rebuilds bootargs internally.

Observations

  • U-Boot dynamically rebuilds bootargs using internal logic (defargs, setupargs, rootfsargs)
  • Manual fw_setenv modifies the persistent U-Boot environment, which Yocto build-time changes do not override
  • There is no extlinux.conf or GRUB; the boot flow is fully Toradex DistroBoot + boot.scr

Questions

  1. What is the Toradex-supported Yocto method to:
  • remove console=tty*
  • inject silent boot arguments
    2.at first boot (image flash), without using manual fw_setenv?*
  1. Which variable is the correct one to override at build time:
  • defargs
  • tdxargs
  • APPEND vs APPENDARGS
  1. Is it expected behavior that UBOOT_ENV_FORCE is ignored when a saved U-Boot environment already exists on the device?
  2. Is there an official Toradex example or reference for a silent or kiosk-style boot on Verdin iMX8MP?

Goal

Every flashed device should boot cleanly and silently on the very first boot, producing the same result as the manual fw_setenv sequence, without any post-flash reboot or manual intervention.

At this point, I have tried multiple recipes and layers, but I am clearly missing where and how Toradex expects kernel arguments to be overridden in Yocto so that they are respected by the U-Boot boot flow.

Any guidance on the correct layer, variable, or supported mechanism.

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


U-Boot Environment Variables and Boot Arguments

Based on the Toradex documentation, the issue you’re experiencing is related to how U-Boot dynamically constructs the bootargs variable (1). The boot script assembles the final kernel command line as follows:

env set bootcmd_args 'run rootfsargs_set && env set bootargs ${rootfsargs} ${setupargs} ${appendargs} ${tdxargs}'

(1)

Understanding the Boot Process

The documentation explains that U-Boot uses several variables to construct the final bootargs (1):

  • rootfsargs - Contains kernel parameters for root filesystem location
  • setupargs - Platform-specific kernel arguments set dynamically
  • appendargs - From the Yocto APPEND variable
  • tdxargs - Reserved for user-defined parameters

Correct Approach for Silent Boot

According to the documentation, all custom kernel parameters must be set using the tdxargs environment variable (1). The documentation specifically states:

“All custom kernel parameters must be set using the tdxargs environment variable. By default, tdxargs is empty and reserved for user-defined parameters.”

For your silent boot configuration, you should focus on the tdxargs variable rather than trying to modify defargs or other internal variables.

Why Your Yocto Approaches Aren’t Working

The documentation indicates that variables like rootfsargs and setupargs are managed by the boot script and should not be modified manually (1). It also warns:

“Treat these variables as read-only. Modifying these variables directly can break device tree loading, kernel arguments, or the entire boot process.”

Recommended Solution

For build-time configuration, you should use the Yocto APPEND variable, which gets mapped to appendargs in the U-Boot environment (1). In your local.conf or layer configuration, try:

APPEND = "quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0"

Console Disabling

For disabling the serial console specifically, the documentation provides guidance on custom U-Boot configuration (2). However, this typically requires rebuilding U-Boot with modified configuration.

Environment Persistence

The reason your manual fw_setenv commands work is that they modify the persistent U-Boot environment stored on the device, which takes precedence over the default environment compiled into U-Boot (1).

To ensure your Yocto-built environment variables are applied on first boot, you may need to ensure that no saved environment exists on the device when flashing, or use UBOOT_ENV_FORCE = "1" correctly in your U-Boot recipe.

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.

Hi @ToradexAI,
I have disabled the kernal logs now it’s showing the blank screen at the disabled console log kernel in that I need to set the kernel blank space to any image at the start, restart and shutdown time the image need to show as splash screen for kernel time instead of the disabled logs space.

Here, no need of video splash screen just an logo is enough as just a png or jpg file for the time of reboot, restart, shutdown time need this configuration.

And this need to set in my custom layer I have already created for the kernel log disabling and other specification, give me the exact and correct configs and files where need to set in the yocto build meta layer recipes.

recipes-bsp Layer:

hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp$ tree .
.
└── u-boot
    ├── files
    │   └── verdin-imx8mp
    │       ├── disable-console-logs.patch
    │       └── fast-boot-config.patch
    ├── u-boot-toradex_%.bbappend

3 directories, 4 files
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp$ cat u-boot/files/verdin-imx8mp/disable-console-logs.patch
Index: git/include/configs/verdin-imx8mp.h
===================================================================
--- git.orig/include/configs/verdin-imx8mp.h
+++ git/include/configs/verdin-imx8mp.h
@@ -44,6 +44,7 @@
        "fdt_board=dev\0" \
        "initrd_addr=0x43800000\0" \
        "initrd_high=0xffffffffffffffff\0" \
+       "tdxargs=quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0\0" \
        "update_uboot=askenv confirm Did you load flash.bin (y/N)?; " \
                "if test \"$confirm\" = \"y\"; then " \
                "setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt " \
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp$ cat u-boot/files/verdin-imx8mp/fast-boot-config.patch
diff --git a/include/configs/verdin-imx8mp.h b/include/configs/verdin-imx8mp.h
index 1234567..abcdefg 100644
--- a/include/configs/verdin-imx8mp.h
+++ b/include/configs/verdin-imx8mp.h
@@ -XX,X +XX,X @@
-#define CONFIG_BOOTDELAY        1
+#define CONFIG_BOOTDELAY        0
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp$ cat u-boot/u-boot-toradex_%.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += "\
    file://disable-console-logs.patch \
"

do_configure:append() {
    # Add tdxargs if it doesn't exist
    if ! grep -q "tdxargs=" ${S}/include/configs/verdin-imx8mp.h; then
        # Find the environment settings section and add tdxargs
        sed -i '/CONFIG_EXTRA_ENV_SETTINGS/a\\t"tdxargs=quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0\\0" \\' ${S}/include/configs/verdin-imx8mp.h
    fi

    # Set boot delay to 0 for fast boot - find and replace any CONFIG_BOOTDELAY definition
    if grep -q "#define CONFIG_BOOTDELAY" ${S}/include/configs/verdin-imx8mp.h; then
        sed -i 's/#define CONFIG_BOOTDELAY.*[0-9]/#define CONFIG_BOOTDELAY 0/' ${S}/include/configs/verdin-imx8mp.h
    else
        # Add CONFIG_BOOTDELAY if it doesn't exist
        echo "#define CONFIG_BOOTDELAY 0" >> ${S}/include/configs/verdin-imx8mp.h
    fi
}
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp$

recipes-kernel Layer:

hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$ tree .
.
└── linux
    ├── files
    │   ├── ppp.cfg
    │   └── verdin-imx8mp-qmi.cfg
    ├── linux-toradex
    │   └── fast-boot.cfg
    └── linux-toradex_%.bbappend

3 directories, 4 files
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$ cat linux/linux-toradex/fast-boot.cfg
# Fast boot kernel optimizations
CONFIG_PRINTK=n
CONFIG_EARLY_PRINTK=n
CONFIG_LOGO=n
CONFIG_UBI_SILENCE_MSG=y
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$ cat linux/linux-toradex_%.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/linux-toradex:"
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

# Prevent the use of in-tree defconfig
unset KBUILD_DEFCONFIG

SRC_URI += "\
    file://fast-boot.cfg \
    file://verdin-imx8mp-qmi.cfg \
    file://ppp.cfg \
"

# Tell the kernel recipe these config fragments should be applied
KERNEL_CONFIG_FRAGMENTS += "fast-boot.cfg verdin-imx8mp-qmi.cfg ppp.cfg"

# Toradex-supported kernel cmdline injection
APPENDARGS += " quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0"
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$

please guide me to set the kernel splash screen with logo instead of the blank screen is displayed before the boot starts, via the yocto build os image creation.

U-Boot Splash Screen Configuration

Based on the Toradex documentation, you can add a splash screen to your U-Boot configuration. However, there are some important considerations for your Verdin iMX8MP setup.

Important Limitation for iMX8-based Modules

The documentation notes that in BSP 5.0 video stack is disabled by default in U-Boot, so you have to enable it manually by adding CONFIG_DM_VIDEO=y to defconfig of the module you’re using (1). This is crucial for your Verdin iMX8MP module.

Adding Splash Screen Support

To implement a U-Boot splash screen in your custom layer, you’ll need to:

1. Enable Video Support in U-Boot

Add this to your u-boot-toradex_%.bbappend:

do_configure:append() {
    # Enable video support for splash screen
    echo "CONFIG_DM_VIDEO=y" >> ${B}/.config
    echo "CONFIG_VIDEO_BMP_RLE8=y" >> ${B}/.config
    echo "CONFIG_SPLASH_SCREEN=y" >> ${B}/.config
    echo "CONFIG_SPLASH_SCREEN_ALIGN=y" >> ${B}/.config
    echo "CONFIG_BMP_16BPP=y" >> ${B}/.config
    echo "CONFIG_BMP_24BPP=y" >> ${B}/.config
    echo "CONFIG_BMP_32BPP=y" >> ${B}/.config
}

2. Convert Your Logo to BMP Format

The documentation specifies the image format requirements. U-Boot can read a specific image format. Use the following command to convert the PNG image to BMP (1):

convert testlogo.png -type Palette -colors 224 -depth 8 -compress none -verbose BMP3:testlogo.bmp

Warning: 8-bit depth is a requirement. It has been reported that the parameter -depth 8 from the command above does not always work. Make sure that your image bit depth is correct manually (1).

3. Add Your Logo to U-Boot

Create a directory structure in your layer:

recipes-bsp/u-boot/files/verdin-imx8mp/
├── disable-console-logs.patch
├── fast-boot-config.patch
└── splash-logo.bmp  # Your converted logo

Then modify your u-boot-toradex_%.bbappend:

FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += "\
    file://disable-console-logs.patch \
    file://splash-logo.bmp \
"

do_configure:append() {
    # Copy logo to U-Boot source
    cp ${WORKDIR}/splash-logo.bmp ${S}/tools/logos/toradex.bmp
    
    # Enable video support for splash screen
    echo "CONFIG_DM_VIDEO=y" >> ${B}/.config
    echo "CONFIG_SPLASH_SCREEN=y" >> ${B}/.config
    echo "CONFIG_SPLASH_SCREEN_ALIGN=y" >> ${B}/.config
    echo "CONFIG_BMP_16BPP=y" >> ${B}/.config
    echo "CONFIG_BMP_24BPP=y" >> ${B}/.config
    echo "CONFIG_BMP_32BPP=y" >> ${B}/.config
}

4. Alternative: Runtime Splash Screen Loading

The documentation also shows how to pre-load splash screen in U-Boot from eMMC/SD/USB (1). You can set these environment variables:

setenv splashfile /boot/logo.bmp
setenv splashsource mmc_fs
saveenv

Important Considerations

  1. iMX8 Limitations: Community discussions indicate that mainline U-boot doesn’t support video displays on i.MX8-based modules (2). The support may be limited even in downstream versions.

  2. Alternative Approach: For a more reliable solution, consider using Plymouth splash screen instead (3), which runs from userspace after the graphics drivers are initialized.

  3. Splash Position: You can adjust the splash screen position using the splashpos variable (1):

setenv splashpos m,m  # Center the splash screen

Recommended Alternative: Plymouth

Given the limitations with U-Boot splash screens on iMX8-based modules, consider implementing a Plymouth-based splash screen that appears early in the boot process but after graphics drivers are loaded (3).

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.

Hi @ToradexAI,

But in the another post in verdin imx8 series is not supported for the u-boot splash screen mentioned.

Then How can I enable the u-boot splash screen is enabled by the u-boot bsp recipes.

https://community.toradex.com/t/u-boot-splash-screen-issue-on-verdin-imx8mp-custom-ivy-carrier-board-hdmi-yocto-bsp-7-5-scarthgap

Can anyone guide me for the correct kernel splash screen instead of the disabled console logs at the start, reboot and shutdown time? replace the kernel blank screen with the logo.

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.

Hi @ToradexAI,

After follow up the steps mentioned in the Yocto: Persistently disable kernel console logs on Verdin iMX8MP at first boot (works only via manual fw_setenv) - #6 by ToradexAI, then the Yocto build without errors and fast boot in kernel variable setup is works but the logo is not displayed at kernel space at start and stop the device. I need the logo should be displayed in the place where we disabled the kernel console logs.

Verify the setups in the recipes layer for the kernel bsp and splash logo related below:

recipes-graphics Layer:

hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen$ tree .
.
├── files
│   └── splash-logo.bmp
└── splash-screen_1.0.bb

1 directory, 2 files
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen$ file files/splash-logo.bmp
files/splash-logo.bmp: PC bitmap, Windows 3.x format, 887 x 267 x 8, image size 237096, resolution 2835 x 2835 px/m, 256 important colors, cbSize 238174, bits offset 1078
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen$ cat 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"
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen$

recipes-kernel Layer:

hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$ tree .
.
└── linux
    ├── files
    │   ├── ppp.cfg
    │   └── verdin-imx8mp-qmi.cfg
    ├── linux-toradex
    │   └── fast-boot.cfg
    └── linux-toradex_%.bbappend

3 directories, 4 files
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$ cat 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


# Fast boot kernel optimizations
# CONFIG_PRINTK=n
# CONFIG_EARLY_PRINTK=n
# CONFIG_LOGO=n
# CONFIG_UBI_SILENCE_MSG=y
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$ cat linux/linux-toradex_%.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/linux-toradex:"
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

# Prevent the use of in-tree defconfig
unset KBUILD_DEFCONFIG

SRC_URI += "\
    file://fast-boot.cfg \
    file://verdin-imx8mp-qmi.cfg \
    file://ppp.cfg \
"

# Tell the kernel recipe these config fragments should be applied
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 init=/init"

RDEPENDS:${KERNEL_PACKAGE_NAME}-base += "splash-screen"
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$

please guide me for correct the configs and recipes for the splash logo instead of the kernel logs displayed place need to replace the logo at start, shutdown and restart device.

I’d be glad to help! Could you let me know which OS and version you are using?

To guide you properly, could you specify the version of the OS you are running? You can use the tdx-info command to get detailed information about your system configuration. Please visit this link for more information about the tdx-info command.

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.

Hi @ToradexAI,

Attached below the OS and device Info,

root@verdin-imx8mp-15722244:~# tdx-info

Software summary
------------------------------------------------------------
Bootloader:               U-Boot
Kernel version:           6.6.101-7.5.0-devel #1 SMP PREEMPT Mon Oct 27 12:24:20 UTC 2025
Kernel command line:      root=PARTUUID=df14b92d-02 ro rootwait console=tty1 console=ttymxc2,115200 quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0
Distro name:              NAME="TDX Wayland with XWayland"
Distro version:           VERSION_ID=7.5.0-devel-20251114145026-build.0
Distro variant:           -
Hostname:                 verdin-imx8mp-15722244
------------------------------------------------------------

Hardware info
------------------------------------------------------------
HW model:                 Toradex Verdin iMX8M Plus WB on Ivy
Toradex version:          0070 V1.1A
Serial number:            15722244
Processor arch:           aarch64
------------------------------------------------------------
root@verdin-imx8mp-15722244:~#

Kernel Logo Configuration Issues

Based on your configuration and the Toradex documentation, there are several issues preventing your kernel logo from displaying properly.

Problem Analysis

Looking at your kernel command line, you have conflicting parameters:

console=tty1 console=ttymxc2,115200 quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0

The logo.nologo parameter is explicitly disabling the kernel logo display (1). This contradicts your goal of showing a splash logo.

Configuration Corrections

1. Fix Your Kernel Arguments

Update your recipes-kernel/linux/linux-toradex_%.bbappend:

# Remove logo.nologo=0 and replace with proper logo display settings
APPENDARGS += " quiet loglevel=0 vt.global_cursor_default=0 vt.default_redraw=0 console=tty0"

The documentation shows that you can disable console messages while keeping the framebuffer console active (1). Remove the logo.nologo parameter entirely to allow logo display.

2. Update Your Kernel Configuration

Your fast-boot.cfg looks correct, but ensure you have the right framebuffer driver enabled. Add these additional configs:

# 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 - these are correct
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y

# Enable DRM framebuffer for iMX8MP
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100

# Disable printk but keep framebuffer
CONFIG_PRINTK=n
CONFIG_EARLY_PRINTK=n

3. Custom Logo Integration

To use your custom logo instead of the default Linux logo, you need to replace the kernel’s built-in logo. Create a new file in your kernel layer:

recipes-kernel/linux/files/logo_custom.patch:

--- a/drivers/video/logo/Makefile
+++ b/drivers/video/logo/Makefile
@@ -17,7 +17,7 @@ obj-$(CONFIG_LOGO_LINUX_VGA16)    += logo_linux_vga16.o
 obj-$(CONFIG_LOGO_LINUX_CLUT224)  += logo_linux_clut224.o
 
 # How to generate logo's
-# Use logo_linux_clut224.ppm as input
+# Use custom logo as input
 
 obj-$(CONFIG_LOGO_SUPERH_MONO)    += logo_superh_mono.o
 obj-$(CONFIG_LOGO_SUPERH_VGA16)   += logo_superh_vga16.o

Then add your converted logo files to the kernel source during build.

4. Console Configuration

The documentation explains how to configure the framebuffer console (1). You can use the fbcon parameter to specify which framebuffer device to use:

# In your U-Boot environment or kernel args
fbcon=map:0  # Use fb0 for console

Alternative Approach: Early Userspace Splash

Since kernel logo support can be limited, consider implementing an early userspace splash using the Cairo framebuffer example from the documentation (1):

Create a simple application that:

  1. Opens /dev/fb0
  2. Maps the framebuffer memory
  3. Uses Cairo to draw your logo
  4. Runs very early in the boot process

The documentation provides a complete Cairo framebuffer implementation (1):

#include <cairo/cairo.h>
#include <linux/fb.h>
// ... (framebuffer mapping and Cairo surface creation code)

Key Points

  1. Remove logo.nologo: This parameter explicitly disables logo display (1)
  2. Enable proper framebuffer support: Ensure CONFIG_DRM_FBDEV_EMULATION=y for iMX8MP (1)
  3. Use console=tty0: This enables framebuffer console while keeping serial console quiet (1)
  4. Consider early userspace: For more control, implement a simple framebuffer application that runs early in boot (1)

The framebuffer console initializes early during boot and can display content before the full graphics stack loads, which is exactly what you need for your silent boot with logo display (1).

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.

Hi @ToradexAI,

I need the exact fix for the splash logo related recipes where all need the correct changes, just look the recipes and give the output of the recipe layer correction,

Yocto OS and Device Info:

root@verdin-imx8mp-15722244:~# tdx-info

Software summary
------------------------------------------------------------
Bootloader:               U-Boot
Kernel version:           6.6.101-7.5.0-devel #1 SMP PREEMPT Mon Oct 27 12:24:20 UTC 2025
Kernel command line:      root=PARTUUID=df14b92d-02 ro rootwait console=tty1 console=ttymxc2,115200 quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0
Distro name:              NAME="TDX Wayland with XWayland"
Distro version:           VERSION_ID=7.5.0-devel-20251114145026-build.0
Distro variant:           -
Hostname:                 verdin-imx8mp-15722244
------------------------------------------------------------

Hardware info
------------------------------------------------------------
HW model:                 Toradex Verdin iMX8M Plus WB on Ivy
Toradex version:          0070 V1.1A
Serial number:            15722244
Processor arch:           aarch64
------------------------------------------------------------
root@verdin-imx8mp-15722244:~#

recipes-graphics Layer:

hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen$ tree .
.
├── files
│   └── splash-logo.bmp
└── splash-screen_1.0.bb

1 directory, 2 files
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen$ cat 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"
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen$ file files/splash-logo.bmp
files/splash-logo.bmp: PC bitmap, Windows 3.x format, 887 x 267 x 8, image size 237096, resolution 2835 x 2835 px/m, 256 important colors, cbSize 238174, bits offset 1078
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen$

recipes-bsp Layer:

hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp$ tree .
.
└── u-boot
    ├── files
    │   └── verdin-imx8mp
    │       ├── disable-console-logs.patch
    │       └── fast-boot-config.patch
    ├── u-boot-toradex_%.bbappend

3 directories, 4 files
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp$
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp$ cat u-boot/files/verdin-imx8mp/disable-console-logs.patch
Index: git/include/configs/verdin-imx8mp.h
===================================================================
--- git.orig/include/configs/verdin-imx8mp.h
+++ git/include/configs/verdin-imx8mp.h
@@ -44,6 +44,7 @@
        "fdt_board=dev\0" \
        "initrd_addr=0x43800000\0" \
        "initrd_high=0xffffffffffffffff\0" \
+       "tdxargs=quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0\0" \
        "update_uboot=askenv confirm Did you load flash.bin (y/N)?; " \
                "if test \"$confirm\" = \"y\"; then " \
                "setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt " \
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp$ cat u-boot/files/verdin-imx8mp/fast-boot-config.patch
diff --git a/include/configs/verdin-imx8mp.h b/include/configs/verdin-imx8mp.h
index 1234567..abcdefg 100644
--- a/include/configs/verdin-imx8mp.h
+++ b/include/configs/verdin-imx8mp.h
@@ -XX,X +XX,X @@
-#define CONFIG_BOOTDELAY        1
+#define CONFIG_BOOTDELAY        0
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp$ cat u-boot/u-boot-toradex_%.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += "\
    file://disable-console-logs.patch \
"

do_configure:append() {
    # Add tdxargs if it doesn't exist
    if ! grep -q "tdxargs=" ${S}/include/configs/verdin-imx8mp.h; then
        # Find the environment settings section and add tdxargs
        sed -i '/CONFIG_EXTRA_ENV_SETTINGS/a\\t"tdxargs=quiet loglevel=0 logo.nologo vt.global_cursor_default=0 vt.default_redraw=0\\0" \\' ${S}/include/configs/verdin-imx8mp.h
    fi

    # Set boot delay to 0 for fast boot - find and replace any CONFIG_BOOTDELAY definition
    if grep -q "#define CONFIG_BOOTDELAY" ${S}/include/configs/verdin-imx8mp.h; then
        sed -i 's/#define CONFIG_BOOTDELAY.*[0-9]/#define CONFIG_BOOTDELAY 0/' ${S}/include/configs/verdin-imx8mp.h
    else
        # Add CONFIG_BOOTDELAY if it doesn't exist
        echo "#define CONFIG_BOOTDELAY 0" >> ${S}/include/configs/verdin-imx8mp.h
    fi
}
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-bsp

recipes-kernel Layer:

hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$ tree .
.
└── linux
    ├── files
    │   ├── ppp.cfg
    │   └── verdin-imx8mp-qmi.cfg
    ├── linux-toradex
    │   └── fast-boot.cfg
    └── linux-toradex_%.bbappend

3 directories, 4 files
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$ cat 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


# Fast boot kernel optimizations
# CONFIG_PRINTK=n
# CONFIG_EARLY_PRINTK=n
# CONFIG_LOGO=n
# CONFIG_UBI_SILENCE_MSG=y
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel$ cat linux/linux-toradex_%.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/linux-toradex:"
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

# Prevent the use of in-tree defconfig
unset KBUILD_DEFCONFIG

SRC_URI += "\
    file://fast-boot.cfg \
    file://verdin-imx8mp-qmi.cfg \
    file://ppp.cfg \
"

# Tell the kernel recipe these config fragments should be applied
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 init=/init"

RDEPENDS:${KERNEL_PACKAGE_NAME}-base += "splash-screen"
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-kernel

Please guide me to fix the logo instead of the kernel console log disabled place replace it with the splash-logo already there in the graphics recipes and correct the recipe and configs for logo setup at start, reboot and shutdown time.

Looking at your configuration, I can see the exact issues preventing the splash logo from displaying. Here are the exact recipe corrections needed:

Critical Issue: Conflicting Parameters

Your U-Boot patch and kernel arguments are contradicting each other. You have logo.nologo which explicitly disables logo display (1).

Recipe Corrections

1. Fix U-Boot Configuration

Update recipes-bsp/u-boot/files/verdin-imx8mp/disable-console-logs.patch:

Index: git/include/configs/verdin-imx8mp.h
===================================================================
--- git.orig/include/configs/verdin-imx8mp.h
+++ git/include/configs/verdin-imx8mp.h
@@ -44,6 +44,7 @@
        "fdt_board=dev\0" \
        "initrd_addr=0x43800000\0" \
        "initrd_high=0xffffffffffffffff\0" \
+       "tdxargs=quiet loglevel=0 vt.global_cursor_default=0 vt.default_redraw=0 console=tty0\0" \
        "update_uboot=askenv confirm Did you load flash.bin (y/N)?; " \
                "if test \"$confirm\" = \"y\"; then " \
                "setexpr blkcnt ${filesize} + 0x1ff &&& setexpr blkcnt " \

Update recipes-bsp/u-boot/u-boot-toradex_%.bbappend:

FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += "\
    file://disable-console-logs.patch \
"

do_configure:append() {
    # Add tdxargs WITHOUT logo.nologo to allow logo display
    if ! grep -q "tdxargs=" ${S}/include/configs/verdin-imx8mp.h; then
        sed -i '/CONFIG_EXTRA_ENV_SETTINGS/a\\t"tdxargs=quiet loglevel=0 vt.global_cursor_default=0 vt.default_redraw=0 console=tty0\\0" \\' ${S}/include/configs/verdin-imx8mp.h
    fi

    # Set boot delay to 0 for fast boot
    if grep -q "#define CONFIG_BOOTDELAY" ${S}/include/configs/verdin-imx8mp.h; then
        sed -i 's/#define CONFIG_BOOTDELAY.*[0-9]/#define CONFIG_BOOTDELAY 0/' ${S}/include/configs/verdin-imx8mp.h
    else
        echo "#define CONFIG_BOOTDELAY 0" >> ${S}/include/configs/verdin-imx8mp.h
    fi
}

2. Fix Kernel Configuration

Update 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 DRM framebuffer for iMX8MP
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100

# Enable logo support - CRITICAL for splash display
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
CONFIG_UBI_SILENCE_MSG=y

Update recipes-kernel/linux/linux-toradex_%.bbappend:

FILESEXTRAPATHS:prepend := "${THISDIR}/linux-toradex:"
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

unset KBUILD_DEFCONFIG

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"

# REMOVE logo.nologo to allow logo display
APPENDARGS += " quiet loglevel=0 vt.global_cursor_default=0 vt.default_redraw=0 console=tty0"

RDEPENDS:${KERNEL_PACKAGE_NAME}-base += "splash-screen"

3. Enhanced Splash Screen Recipe

Update recipes-graphics/splash-screen/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 -d ${D}/etc/systemd/system
    
    # Install logo
    install -m 0644 ${WORKDIR}/splash-logo.bmp ${D}/usr/share/pixmaps/splash-logo.bmp
    
    # Create early splash service for shutdown/reboot
    cat > ${D}/etc/systemd/system/early-splash.service << 'EOF'
[Unit]
Description=Early Splash Screen
DefaultDependencies=no
After=sysinit.target
Before=basic.target

[Service]
Type=oneshot
ExecStart=/usr/bin/fbv -f -i /usr/share/pixmaps/splash-logo.bmp
RemainAfterExit=yes

[Install]
WantedBy=basic.target
EOF
}

FILES:${PN} = "/usr/share/pixmaps/splash-logo.bmp /etc/systemd/system/early-splash.service"

RDEPENDS:${PN} += "fbv"

Key Changes Made

  1. Removed logo.nologo - This was explicitly disabling logo display (1)
  2. Added CONFIG_DRM_FBDEV_EMULATION=y - Essential for iMX8MP framebuffer support (1)
  3. Fixed console redirection - Using console=tty0 for framebuffer console (1)
  4. Enhanced splash service - Added systemd service for shutdown/reboot logo display

Result After Changes

Your kernel command line should become:

root=PARTUUID=df14b92d-02 ro rootwait console=tty1 console=ttymxc2,115200 quiet loglevel=0 vt.global_cursor_default=0 vt.default_redraw=0 console=tty0

The framebuffer console will initialize early during boot and display your custom logo instead of the blank screen (1).

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.

Hi @ToradexAI,

got an error on recipes-graphics at the splash screen bbappend file,

recipes-graphics Layer:

hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen$ ls
files  splash-screen_1.0.bb
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen$ cat 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 -d ${D}/etc/systemd/system

    # Install logo
    install -m 0644 ${WORKDIR}/splash-logo.bmp ${D}/usr/share/pixmaps/splash-logo.bmp

    # Create early splash service for shutdown/reboot
    cat > ${D}/etc/systemd/system/early-splash.service << 'EOF'
[Unit]
Description=Early Splash Screen
DefaultDependencies=no
After=sysinit.target
Before=basic.target

[Service]
Type=oneshot
ExecStart=/usr/bin/fbv -f -i /usr/share/pixmaps/splash-logo.bmp
RemainAfterExit=yes

[Install]
WantedBy=basic.target
EOF
}

FILES:${PN} = "/usr/share/pixmaps/splash-logo.bmp /etc/systemd/system/early-splash.service"

RDEPENDS:${PN} += "fbv"
hari@Administrator:~/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen

Result Error on Yocto build:

hari@Administrator:~/oe-core/build$ bitbake -c cleansstate virtual/kernel
NOTE: Reconnecting to bitbake server...
Loading cache: 100% |########################################################################################| Time: 0:00:01
Loaded 5422 entries from dependency cache.
Parsing recipes: 100% |######################################################################################| Time: 0:00:01
Parsing of 3394 .bb files complete (3392 cached, 2 parsed). 5424 targets, 638 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
ERROR: Nothing RPROVIDES 'fbv' (but /home/hari/oe-core/layers/meta-lokbest/recipes-graphics/splash-screen/splash-screen_1.0.bb RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'fbv' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['fbv']
NOTE: Runtime target 'splash-screen' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['splash-screen', 'fbv']
NOTE: Runtime target 'make-mod-scripts-dev' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['make-mod-scripts-dev', 'virtual/kernel', 'splash-screen', 'fbv']
ERROR: Required build target 'virtual/kernel' has no buildable providers.
Missing or unbuildable dependency chain was: ['virtual/kernel', 'splash-screen', 'fbv']

Summary: There were 2 ERROR messages, returning a non-zero exit code.
hari@Administrator:~/oe-core/build$

Fix the FBV Dependency Error

The error occurs because fbv package doesn't exist in your BSP. Based on the Toradex documentation for splash screens, we should use Plymouth instead, which is the recommended approach for splash screen implementation [(1)](https://developer.toradex.com/linux-bsp/os-development/boot/how-to-add-custom-splash-screen/#adding-a-custom-splash-screen).

Corrected Splash Screen Recipe

The documentation shows how to properly implement Plymouth-based splash screens [(1)](https://developer.toradex.com/linux-bsp/os-development/boot/how-to-add-custom-splash-screen/#adding-a-custom-splash-screen). Here's the corrected recipe:

1. Update recipes-graphics/splash-screen/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 logo for Plymouth and kernel
install -m 0644 ${WORKDIR}/splash-logo.bmp ${D}/usr/share/pixmaps/splash-logo.bmp

# Create a simple framebuffer display script
install -d ${D}/usr/bin
cat > ${D}/usr/bin/show-splash << 'EOF'

#!/bin/sh

Simple framebuffer splash display

if [ -c /dev/fb0 ]; then
# Clear screen and show logo using kernel framebuffer
echo 0 > /sys/class/graphics/fbcon/cursor_blink
cat /usr/share/pixmaps/splash-logo.bmp > /dev/fb0 2>/dev/null || true
fi
EOF
chmod +x ${D}/usr/bin/show-splash
}

FILES:${PN} = “/usr/share/pixmaps/splash-logo.bmp /usr/bin/show-splash”

Remove fbv dependency - not available in BSP

2. Alternative: Plymouth-Based Approach

The documentation provides a complete Plymouth implementation [(1)](https://developer.toradex.com/linux-bsp/os-development/boot/how-to-add-custom-splash-screen/#adding-a-custom-splash-screen). Create a Plymouth-based splash screen instead:

Create recipes-core/plymouth/plymouth_%.bbappend:

FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += "
file://splash-logo.bmp
file://spinner.plymouth
"

EXTRA_OECONF += “–with-runtimedir=/run”

do_install:append () {
install -m 0644 ${WORKDIR}/splash-logo.bmp ${D}${datadir}/plymouth/themes/spinner/watermark.png
install -m 0644 ${WORKDIR}/spinner.plymouth ${D}${datadir}/plymouth/themes/spinner/spinner.plymouth
}

[(1)](https://developer.toradex.com/linux-bsp/os-development/boot/how-to-add-custom-splash-screen/#adding-a-custom-splash-screen)

Create recipes-core/plymouth/files/spinner.plymouth:

[Plymouth Theme]
Name=Spinner
Description=A theme that features a simple spinner
ModuleName=two-step

[two-step]
Font=Liberation Sans 12
TitleFont=Liberation Sans 15
ImageDir=/usr/share/plymouth/themes/spinner
DialogHorizontalAlignment=.013
DialogVerticalAlignment=.052
TitleHorizontalAlignment=.52
TitleVerticalAlignment=.80
HorizontalAlignment=.52
VerticalAlignment=.73
WatermarkHorizontalAlignment=.5
WatermarkVerticalAlignment=.96
Transition=none
TransitionDuration=0.0
BackgroundStartColor=0x2e3436
BackgroundEndColor=0x2e3436
BackgroundDirection=vertical
ProgressBarColor=0xffffff
ProgressBarBackgroundColor=0x606060
MessageBelowAnimation=true

[(1)](https://developer.toradex.com/linux-bsp/os-development/boot/how-to-add-custom-splash-screen/#adding-a-custom-splash-screen)

3. Enable Plymouth in Your Image

The documentation shows how to add Plymouth to your build [(1)](https://developer.toradex.com/linux-bsp/os-development/boot/how-to-add-custom-splash-screen/#adding-a-custom-splash-screen). Add to your conf/local.conf:

CORE_IMAGE_EXTRA_INSTALL += "plymouth"

[(1)](https://developer.toradex.com/linux-bsp/os-development/boot/how-to-add-custom-splash-screen/#adding-a-custom-splash-screen)

4. Simplified Kernel Logo Approach

For a simpler solution focusing on kernel logo display, update your splash screen recipe to avoid external dependencies:

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”

No external dependencies

Key Fixes

  1. Removed fbv dependency - Not available in your BSP
  2. Added Plymouth support - The recommended approach from Toradex documentation [(1)](https://developer.toradex.com/linux-bsp/os-development/boot/how-to-add-custom-splash-screen/#adding-a-custom-splash-screen)
  3. Simplified framebuffer approach - Direct kernel logo display without external tools
  4. Proper file installation - Following Toradex Plymouth implementation patterns [(1)](https://developer.toradex.com/linux-bsp/os-development/boot/how-to-add-custom-splash-screen/#adding-a-custom-splash-screen)

The Plymouth approach is the official Toradex method for splash screens and will provide better integration with your silent boot configuration [(1)](https://developer.toradex.com/linux-bsp/os-development/boot/how-to-add-custom-splash-screen/#adding-a-custom-splash-screen).

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.

Hi @ToradexAI,

no need of plymouth service for the splash screen already I has a device application at system starts after the weston service.

so lcearly explain and give the correct updated bbappend for the splash screen at start, restart, and shutdown time of the device.

please guide for the splash screen logo for the verdin imx8mp instead of the disabled console logs place in kernel

I don’t have specific information about implementing a framebuffer-based splash screen for Verdin iMX8MP in the available sources. The documentation I have access to covers U-Boot splash screens (1) and general splash screen approaches (2), but doesn’t provide detailed Yocto recipes for kernel-level framebuffer splash implementation on your specific platform.

Check out these potentially useful sources: Splash Screen on U-Boot, Splash Screen on Toradex Computer on Modules, Inquiry about Adding a Boot Logo on Yocto for iMX8MP Verdin

Would you like me to provide a general answer based on my knowledge instead?

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.

Hi @ToradexAI,

Here the splash screen setup via the plymouth and weston service which is appears first and fast at bootloader starts?

Plymouth vs Weston Service Order

Based on the Toradex documentation, Plymouth runs from an initial minimal root file system (initramfs) very early during boot (1). This means Plymouth appears before Weston starts, which is exactly what you want for early splash screen display.

Plymouth Boot Timing

The documentation explains that Plymouth is started from an initial minimal root file system (initramfs) very early during boot (1). This makes it ideal for showing a splash screen immediately when the bootloader finishes, before any other services including Weston start.

Plymouth vs Weston Conflicts

Community discussions indicate there can be conflicts between Plymouth and Weston (2). The documentation suggests ensuring that Plymouth completes its boot animation before Weston starts (2). You can manage this by adjusting the systemd service order and checking the dependencies between Plymouth and Weston services (2).

Service Configuration

To ensure proper service order:

  1. Service Order: Ensure that Plymouth completes its boot animation before Weston starts (2)
  2. DRM Settings: Verify that your system’s Direct Rendering Manager (DRM) settings are compatible with both Plymouth and Weston (2)
  3. Configuration Files: Review the configuration files for both Plymouth and Weston to ensure no conflicting settings (2)

Plymouth Implementation for Your BSP

For your Verdin iMX8MP with BSP 7.5.0, Plymouth appears very early during boot from the initramfs (1), which means it will display before:

  • Weston service starts
  • Your application starts
  • Any other userspace services

This timing makes Plymouth the ideal solution for your requirement of showing a splash screen at the earliest possible moment during boot, replacing the disabled console logs space.

Key Points

  1. Plymouth starts first: It runs from initramfs very early in boot (1)
  2. Before Weston: Plymouth displays before Weston and other services start (2)
  3. Early display: Perfect for replacing the disabled console log space with your logo (1)
  4. Service management: Proper systemd service ordering prevents conflicts (2)

Plymouth is specifically designed to provide early boot graphics before the full userspace graphics stack (including Weston) initializes, making it the perfect solution for your silent boot with logo requirement.

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.

Hi @ToradexAI,

now give me the basic setup with the early discussed splash-logo.bmp setup via the plymouth service as the recipes and layer for this configuration for the yocto build.

Plymouth Splash Screen Setup for Yocto BSP

Based on the Toradex documentation for adding custom splash screens using Plymouth (1), here’s the complete recipe configuration for your BSP 7.5.0:

Required Layer Structure

1. Create Plymouth Recipe Directory

Create this directory structure in your meta layer:

recipes-core/plymouth/
├── files/
│   ├── splash-logo.bmp
│   └── spinner.plymouth
└── plymouth_%.bbappend

2. Plymouth bbappend Recipe

Create recipes-core/plymouth/plymouth_%.bbappend:

FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += " \
    file://splash-logo.bmp \
    file://spinner.plymouth \
"

EXTRA_OECONF += "--with-runtimedir=/run"

do_install:append () {
    install -m 0644 ${WORKDIR}/splash-logo.bmp ${D}${datadir}/plymouth/themes/spinner/watermark.png
    install -m 0644 ${WORKDIR}/spinner.plymouth ${D}${datadir}/plymouth/themes/spinner/spinner.plymouth
}

(1)

3. Plymouth Theme Configuration

Create recipes-core/plymouth/files/spinner.plymouth:

[Plymouth Theme]
Name=Spinner
Description=Adoption of official Spinner Theme for Toradex.
ModuleName=two-step

[two-step]
Font=Cantarell 12
TitleFont=Cantarell Light 30
ImageDir=/usr/share/plymouth/themes/spinner
DialogHorizontalAlignment=.5
DialogVerticalAlignment=.382
TitleHorizontalAlignment=.5
TitleVerticalAlignment=.382
HorizontalAlignment=.5
VerticalAlignment=.7
WatermarkHorizontalAlignment=.5
WatermarkVerticalAlignment=.45
Transition=none
TransitionDuration=0.0
BackgroundStartColor=0x000000
BackgroundEndColor=0x000000
ProgressBarBackgroundColor=0x606060
ProgressBarForegroundColor=0xffffff
MessageBelowAnimation=true

(1)

4. Enable Plymouth in Your Build

Add to your conf/local.conf:

CORE_IMAGE_EXTRA_INSTALL += "plymouth"

(1)

5. Remove Logo Disable Parameter

Update your U-Boot patch recipes-bsp/u-boot/files/verdin-imx8mp/disable-console-logs.patch:

Index: git/include/configs/verdin-imx8mp.h
===================================================================
--- git.orig/include/configs/verdin-imx8mp.h
+++ git/include/configs/verdin-imx8mp.h
@@ -44,6 +44,7 @@
        "fdt_board=dev\0" \
        "initrd_addr=0x43800000\0" \
        "initrd_high=0xffffffffffffffff\0" \
+       "tdxargs=quiet loglevel=0 vt.global_cursor_default=0 vt.default_redraw=0 console=tty0\0" \
        "update_uboot=askenv confirm Did you load flash.bin (y/N)?; " \
                "if test \"$confirm\" = \"y\"; then " \
                "setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt " \

6. Update Kernel Arguments

Update your recipes-kernel/linux/linux-toradex_%.bbappend:

# Remove logo.nologo to allow Plymouth splash display
APPENDARGS += " quiet loglevel=0 vt.global_cursor_default=0 vt.default_redraw=0 console=tty0"

Key Configuration Points

  1. Plymouth runs from initramfs very early during boot, before Weston starts (1)
  2. Remove logo.nologo parameter to allow splash screen display (1)
  3. Use your existing splash-logo.bmp file in the Plymouth files directory (1)
  4. Plymouth handles boot, shutdown, and reboot splash screens automatically (1)

Final Layer Structure

Your complete meta layer should look like:

meta-lokbest/
├── recipes-bsp/u-boot/...          (your existing U-Boot configs)
├── recipes-kernel/linux/...        (your existing kernel configs)
└── recipes-core/plymouth/          (new Plymouth configuration)
    ├── files/
    │   ├── splash-logo.bmp
    │   └── spinner.plymouth
    └── plymouth_%.bbappend

This configuration will display your splash logo very early in the boot process, replacing the disabled console logs space with your custom image during boot, reboot, and shutdown (1).

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.