Kernel-Level Splash Screen Implementation on Verdin iMX8MP SOM, How to Replace the Blank Screen Before Plymouth Starts?

Hi Toradex support team,

I’m looking for guidance on implementing a splash screen logo during the early kernel boot stage on the Verdin iMX8MP SOM.

Right now, I have console logs disabled, so the early kernel period shows a blank screen. After that, Plymouth starts and shows its splash screen, and eventually my device application takes over.

My main question is: Can Plymouth replace the blank kernel period with a splash logo, or does Plymouth only start after the kernel has already handed off? If Plymouth can’t cover that early stage, what’s the correct way to show a splash logo during the kernel boot (before Plymouth and before my application)?

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=7d38c44c-02 ro rootwait console=tty1 console=ttymxc2,115200 quiet loglevel=0 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 Verdin Development Board
Toradex version:          0070 V1.1A
Serial number:            15722244
Processor arch:           aarch64
------------------------------------------------------------
root@verdin-imx8mp-15722244:~#

Need this setup through the yocto build without make it manual, by the build OS will generate the inside the kernel level space at start, restart, reboot and shutdown times.

Any valid suggestions or guidance on kernel-level splash implementation would be appreciated.

Hi, I’m the Toradex AI Assistant.

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


Based on your Verdin iMX8MP setup and requirements, I can provide guidance on implementing splash screens throughout the boot process.

Understanding the Boot Timeline

You’re correct that Plymouth starts after the kernel has loaded and handed off control(1). The boot sequence typically follows: U-Boot → Kernel → Plymouth → Your Application.

Solutions for Different Boot Stages

1. U-Boot Splash Screen (Earliest Stage)

For the very earliest splash screen during U-Boot, you can implement a U-Boot splash screen(2). This requires:

  • Enabling framebuffer support in U-Boot by adding CONFIG_DM_VIDEO=y to your defconfig(2)
  • Converting your logo to BMP format with 8-bit depth(2):
convert testlogo.png -type Palette -colors 224 -depth 8 -compress none -verbose BMP3:testlogo.bmp

(2)

  • Replacing the default Toradex logo at u-boot-toradex/tools/logos/toradex.bmp(2)

2. Plymouth with Initramfs (Kernel Boot Stage)

To minimize the blank screen period during kernel boot, you can use Plymouth with initramfs to start the splash screen as early as possible(1)(3). This approach allows Plymouth to start during kernel loading rather than after rootfs mounting.

The key configuration involves:

  1. Adding Plymouth to your Yocto build(1):
CORE_IMAGE_EXTRA_INSTALL += "plymouth"

(1)

  1. Creating a custom Plymouth theme(1). In your custom layer, create recipes-core/plymouth/plymouth_%.bbappend:
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += " \
	file://torizonlogo-white.png \
	file://spinner.plymouth \
"

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

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

(1)

  1. Creating an initramfs image with Plymouth(3) to ensure Plymouth starts during kernel loading rather than after rootfs mounting.

3. Shutdown and Reboot Splash Screens

For shutdown and reboot splash screens, Plymouth can handle these events(4). You may need to modify systemd service files to ensure proper splash screen display during these transitions(4).

Recommended Approach for Your Setup

Given your Verdin iMX8MP and requirement for automated Yocto integration, I recommend:

  1. Start with Plymouth + initramfs approach(1)(3) - This will cover the kernel boot period and provide the most seamless experience
  2. Optionally add U-Boot splash(2) if you need coverage of the very earliest boot stage
  3. Configure Plymouth for shutdown/reboot(4) to complete the full boot cycle coverage

The Plymouth with initramfs approach is particularly effective because it can start showing your splash screen very early in the boot process, significantly reducing the blank screen period you’re experiencing(3).

For your Verdin iMX8MP specifically, since it uses upstream U-Boot(5), you can follow the standard U-Boot splash screen implementation if you choose to add that layer as well.

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 didn’t able to access the u-boot console for now, I have the Verdin iMX8MP som for the development. I have already read some posts there is not splash screen support for im8 series.

So I need to setup the logo start at kernel space via the yocto build to see the result.

can I use this method for the early spalsh screen logo of own png to converted bmp file no need of spinner on that only image logo is enough.

can I Follow these setup for the early kernel level splash logo at start instead of the console log disabled blank screen?

Early Kernel Splash Screen Setup for Verdin iMX8MP

Based on your requirements and the Verdin iMX8MP platform, you can implement an early kernel-level splash screen using Plymouth with a static image instead of a spinner animation(1).

Kernel-Level Splash Screen Implementation

Starting from BSP 6, the Linux Kernel splashscreen support has been dropped(2). Plymouth is now the recommended approach for custom splash screens(2). Plymouth runs very early in the boot process (even before the root filesystem is mounted!) and provides a graphical boot animation while the boot process happens in the background(1).

Static Image Setup with Plymouth

Yes, you can use Plymouth for a static image logo without the spinner animation. Here’s the implementation:

1. Add Plymouth to Your Yocto Build

In your conf/local.conf file, add(1):

CORE_IMAGE_EXTRA_INSTALL += "plymouth"

(1)

2. Create Custom Layer Structure

Create a custom layer with the following structure(1):

$ cd layers/meta-custom
$ mkdir recipes-core && mkdir recipes-core/plymouth
$ tree
.
├── conf
│   └── layer.conf
├── COPYING.MIT
├── README
└── recipes-core
    └── plymouth

(1)

3. Create Files Directory and Add Your Logo

Create a files folder with your converted BMP image(1). For your static logo, you’ll need:

  • Your custom logo (PNG format, which you can convert to the required format)
  • A modified spinner.plymouth file(1)

4. Image Format Requirements

For Plymouth compatibility, ensure your image meets these requirements:

  • Convert PNG to appropriate format for Plymouth themes
  • Consider resolution compatibility with your display setup
  • Static images work well with Plymouth’s spinner theme by replacing the animation elements

5. Custom Plymouth Recipe

Create a Plymouth recipe in your custom layer that installs your static logo instead of the default animated spinner. The recipe should install your custom image to the Plymouth themes directory.

Early Boot Coverage

Plymouth with initramfs can start very early in the kernel boot process, which addresses your requirement to replace the blank screen period(1). This approach provides coverage during the kernel loading phase, significantly reducing the blank screen time you’re experiencing.

Implementation Benefits

This approach will:

  • Start displaying your logo during early kernel boot
  • Eliminate the blank screen period with console logs disabled
  • Work seamlessly with your existing Yocto build process
  • Provide consistent branding throughout the boot sequence

The Plymouth implementation is the officially supported method for splash screens on BSP 6 and later(2), making it the correct approach for your Verdin iMX8MP setup.

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 how was met-custom layer should be presented for the plymouth service as append params in local.conf file and recipes and its dependencies file for the static logo in the recipe-core should be listed and correct bbappend file for these required setup?

Here’s the complete structure and configuration for implementing a static logo with Plymouth in your Yocto build:

Complete Meta-Custom Layer Structure

Based on the official documentation, here’s the complete structure for your custom layer(1):

$ cd layers/meta-custom
$ mkdir recipes-core && mkdir recipes-core/plymouth
$ tree
.
├── conf
│   └── layer.conf
├── COPYING.MIT
├── README
└── recipes-core
    └── plymouth
        └── files
           ├── spinner.plymouth
           └── your-logo.png
        └── plymouth_%.bbappend

(1)

Local.conf Configuration

In your conf/local.conf file, add(1):

CORE_IMAGE_EXTRA_INSTALL += "plymouth"

(1)

Custom Layer Configuration

Create the layer configuration file conf/layer.conf(2):

# We have a conf and classes directory, append to BBPATH
BBPATH .= ":${LAYERDIR}"

# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "meta-custom"
BBFILE_PATTERN_meta-custom = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-custom = "24"

# Layer dependencies
LAYERDEPENDS_meta-custom = " \
    core \
    yocto \
    openembedded-layer \
"

LAYERSERIES_COMPAT_meta-custom = "scarthgap"

(2)

Plymouth BBAppend Recipe

Create recipes-core/plymouth/plymouth_%.bbappend(1):

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

SRC_URI += " \
	file://your-logo.png \
	file://spinner.plymouth \
"

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

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

(1)

Plymouth Theme Configuration

Create the files/spinner.plymouth configuration file. You can use the spinner.plymouth file as a reference(1).

For a static logo setup, the spinner.plymouth file should be configured to display your image without animation elements.

File Dependencies

The complete file structure should look like(1):

$ tree
.
├── conf
│   └── layer.conf
├── COPYING.MIT
├── README
└── recipes-core
	└── plymouth
		├── files
		│   ├── spinner.plymouth
		│   └── your-logo.png
		└── plymouth_%.bbappend

(1)

Build Process

After setting up the layer structure:

  1. Add your custom layer to the build(2):
$ bitbake-layers add-layer ../layers/meta-custom

(2)

  1. Build your image(1):
$ bitbake tdx-reference-multimedia-image

(1)

  1. Verify Plymouth installation(1):
$ bitbake -e tdx-reference-multimedia-image | grep plymouth

(1)

Key Points for Static Logo Implementation

  • Replace your-logo.png with your actual logo file name
  • The logo will be installed as watermark.png in the Plymouth spinner theme directory(1)
  • Ensure your image format is compatible with Plymouth (PNG format works well)
  • The spinner.plymouth configuration file controls how the image is displayed
  • For a static logo, you can modify the spinner theme to show only your logo without animation

This setup will integrate your static logo into the Plymouth splash screen system, providing early boot coverage during the kernel loading phase.

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 structure, files and its content without the spinner only the static image file is enough for me? give me the correct and valid entire structure for it?

Complete Meta-Custom Layer Structure for Static Image Plymouth

Here’s the exact structure and content for implementing a static image splash screen with Plymouth(1):

Directory Structure

meta-custom/
├── conf/
│   └── layer.conf
├── COPYING.MIT
├── README
└── recipes-core/
    └── plymouth/
        ├── files/
        │   ├── spinner.plymouth
        │   └── your-static-logo.png
        └── plymouth_%.bbappend

1. Layer Configuration File

File: conf/layer.conf

# We have a conf and classes directory, append to BBPATH
BBPATH .= ":${LAYERDIR}"

# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "meta-custom"
BBFILE_PATTERN_meta-custom = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-custom = "24"

# Layer dependencies
LAYERDEPENDS_meta-custom = " \
    core \
    yocto \
    openembedded-layer \
"

LAYERSERIES_COMPAT_meta-custom = "scarthgap"

2. Plymouth Recipe BBAppend

File: recipes-core/plymouth/plymouth_%.bbappend(1)

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

SRC_URI += " \
	file://your-static-logo.png \
	file://spinner.plymouth \
"

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

do_install:append () {
	install -m 0644 ${WORKDIR}/your-static-logo.png ${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 for Static Image

File: files/spinner.plymouth

For a static image display, create this configuration:

[Plymouth Theme]
Name=Static Logo
Description=Static logo display for boot screen
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=.5
WatermarkHorizontalAlignment=.5
WatermarkVerticalAlignment=.5
Transition=none
TransitionDuration=0.0
BackgroundStartColor=0x000000
BackgroundEndColor=0x000000
ProgressBarBackgroundColor=0x606060
ProgressBarForegroundColor=0xffffff
MessageBelowAnimation=false

4. Local.conf Configuration

File: conf/local.conf(1)

CORE_IMAGE_EXTRA_INSTALL += "plymouth"

(1)

5. Image Requirements

  • File: files/your-static-logo.png
  • Place your static logo PNG file in the files directory
  • The image will be installed as watermark.png in the Plymouth theme(1)
  • Recommended resolution: Match your display resolution for best results

6. Build Integration

Add your layer to the build:

bitbake-layers add-layer ../layers/meta-custom

Build your image(1):

bitbake tdx-reference-multimedia-image

(1)

Key Points for Static Logo Implementation

  • The ModuleName=two-step provides the static image display capability
  • Transition=none and TransitionDuration=0.0 eliminate animations
  • MessageBelowAnimation=false keeps the display clean
  • The watermark positioning controls where your logo appears on screen
  • Your PNG logo will be displayed as a static image during boot

This configuration eliminates all spinner animations and displays only your static logo during the Plymouth splash screen phase(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,

This will display the splash logo at the time of device starts, reboot, restart and then shutdown time or only at start time. If not, need to fill the logo at all these scenarios?

Based on the Plymouth implementation and your requirements, here’s when the splash logo will be displayed:

Plymouth Splash Screen Display Scenarios

The Plymouth configuration I provided will display your static logo during:

:white_check_mark: Covered by Default Plymouth Setup:

  • Device startup/boot - Plymouth runs very early in the boot process (even before the root filesystem is mounted!) and provides a graphical boot animation while the boot process happens in the background(1)
  • System restart/reboot - Plymouth handles the transition during reboot cycles

:cross_mark: Additional Configuration Needed:

  • Shutdown - This requires additional configuration and may need systemd service modifications

Shutdown Splash Screen Implementation

For complete coverage including shutdown, you’ll need additional configuration. Based on community discussions, shutdown splash screens require specific systemd service modifications(2). Plymouth can handle shutdown events, but this needs to be explicitly configured in your system.

Complete Boot Cycle Coverage

To achieve splash logo display for all scenarios (start, restart, reboot, and shutdown), you would need:

  1. The Plymouth configuration I provided - handles startup and reboot
  2. Additional systemd service configuration - for proper shutdown splash screen display
  3. Possible kernel command line modifications - to ensure Plymouth starts early and stays active during transitions

Current Implementation Scope

The meta-custom layer structure and Plymouth configuration I provided will give you:

  • :white_check_mark: Boot/startup splash screen
  • :white_check_mark: Restart/reboot splash screen
  • :warning: Shutdown may require additional configuration

Recommendation

Start with the Plymouth implementation I provided, which will cover your primary use cases (boot, restart, reboot). Test this implementation first, and if you need shutdown splash screen coverage, we can provide additional configuration for systemd services to handle the shutdown scenario.

The Plymouth approach ensures your static logo appears during the kernel loading phase, eliminating the blank screen period you’re experiencing during device startup and restarts(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,

Here after setting up the meta-custom layer and configured it in the local.conf for the plymouth but it recieves an error at clean the image state, why?

meta-custom Layer:

hari@Administrator:~/oe-core/layers/meta-custom$ tree .
.
├── COPYING.MIT
├── README
├── conf
│   └── layer.conf
└── recipes-core
    └── plymouth
        ├── files
        │   ├── lokbest_logo.png
        │   └── spinner.plymouth
        └── plymouth_%.bbappend

4 directories, 6 files
hari@Administrator:~/oe-core/layers/meta-custom$ cat conf/layer.conf
# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"

# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
            ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "meta-custom"
BBFILE_PATTERN_meta-custom = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-custom = "6"

# Layer dependencies
LAYERDEPENDS_meta-custom = " \
    core \
    yocto \
    openembedded-layer \
"
# LAYERDEPENDS_meta-custom = "core"
LAYERSERIES_COMPAT_meta-custom = "scarthgap"
hari@Administrator:~/oe-core/layers/meta-custom$ cat recipes-core/plymouth/plymouth_%.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += " \
        file://lokbest_logo.png \
        file://spinner.plymouth \
"

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

do_install:append () {
        install -m 0644 ${WORKDIR}/lokbest_logo.png ${D}${datadir}/plymouth/themes/spinner/watermark.png
        install -m 0644 ${WORKDIR}/spinner.plymouth ${D}${datadir}/plymouth/themes/spinner/spinner.plymouth
}
hari@Administrator:~/oe-core/layers/meta-custom$ ls recipes-core/plymouth/files/.
lokbest_logo.png  spinner.plymouth
hari@Administrator:~/oe-core/layers/meta-custom$

local.conf file:

# Enable required features
DISTRO_FEATURES:append = " cellular ppp"

# Chromium Browser (GPU accelerated)
CORE_IMAGE_EXTRA_INSTALL += "plymouth chromium-ozone-wayland"

# Accept commercial licensed codecs for Chromium
LICENSE_FLAGS_ACCEPTED += "commercial commercial_libav commercial_x264"

Error Result:

hari@Administrator:~/oe-core/build$ bitbake -c cleansstate tdx-reference-multimedia-image
Loading cache: 100% |########################################################################################| Time: 0:00:01
Loaded 5422 entries from dependency cache.
Parsing recipes: 100% |######################################################################################| Time: 0:00:02
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 'dracut' (but /home/hari/oe-core/build/../layers/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_24.004.60.bb RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'dracut' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['dracut']
NOTE: Runtime target 'plymouth' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['plymouth', 'dracut']
ERROR: Required build target 'tdx-reference-multimedia-image' has no buildable providers.
Missing or unbuildable dependency chain was: ['tdx-reference-multimedia-image', 'plymouth', 'dracut']

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

Guide me for the exact setup for these plymouth layer’s as correct?

Error Analysis and Solution

The error you’re encountering is due to a missing dependency for Plymouth. The error message shows:

ERROR: Nothing RPROVIDES 'dracut' (but /home/hari/oe-core/build/../layers/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_24.004.60.bb RDEPENDS on or otherwise requires it)

This indicates that Plymouth requires dracut which is not available in your current layer configuration.

Solution: Add Required Layer

1. Add the meta-custom Layer to Your Build

First, ensure your meta-custom layer is properly added to the build configuration(1):

$ bitbake-layers add-layer ../layers/meta-custom

2. Update bblayers.conf

Add your custom layer to build/conf/bblayers.conf(1):

BBLAYERS ?= " \
  ${TOPDIR}/../layers/meta-toradex-nxp \
  ${TOPDIR}/../layers/meta-freescale \
  ${TOPDIR}/../layers/meta-freescale-3rdparty \
  ${TOPDIR}/../layers/meta-toradex-bsp-common \
  ${TOPDIR}/../layers/meta-openembedded/meta-oe \
  ${TOPDIR}/../layers/meta-openembedded/meta-filesystems \
  ${TOPDIR}/../layers/meta-openembedded/meta-gnome \
  ${TOPDIR}/../layers/meta-openembedded/meta-xfce \
  ${TOPDIR}/../layers/meta-openembedded/meta-networking \
  ${TOPDIR}/../layers/meta-openembedded/meta-multimedia \
  ${TOPDIR}/../layers/meta-openembedded/meta-python \
  ${TOPDIR}/../layers/meta-freescale-distro \
  ${TOPDIR}/../layers/meta-toradex-demos \
  ${TOPDIR}/../layers/meta-qt5 \
  ${TOPDIR}/../layers/meta-toradex-distro \
  ${TOPDIR}/../layers/meta-yocto/meta-poky \
  ${TOPDIR}/../layers/openembedded-core/meta \
  ${TOPDIR}/../layers/meta-custom \
"

(1)

3. Fix Layer Dependencies

Update your conf/layer.conf to remove problematic dependencies:

# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"

# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
            ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "meta-custom"
BBFILE_PATTERN_meta-custom = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-custom = "6"

# Simplified layer dependencies
LAYERDEPENDS_meta-custom = "core"

LAYERSERIES_COMPAT_meta-custom = "scarthgap"

4. Alternative Plymouth Configuration for BSP

Based on the Chinese documentation example(2), you can use a simpler approach for Plymouth with initramfs. Update your local.conf:

# add plymouth support
CORE_IMAGE_EXTRA_INSTALL += "plymouth"
INITRAMFS_IMAGE = "initramfs-plymouth-splash-image"
INITRAMFS_FSTYPES = "cpio.gz"

(2)

5. Clean Build and Retry

After making these changes:

$ bitbake -c cleanall plymouth
$ bitbake -c cleanall tdx-reference-multimedia-image

(3)

Then rebuild:

$ bitbake tdx-reference-multimedia-image

(3)

Key Points

  • The dracut dependency error suggests Plymouth is trying to use initramfs functionality that requires additional layers
  • Your meta-custom layer structure looks correct
  • The issue is likely in the layer dependencies and Plymouth configuration
  • Using the initramfs approach with Plymouth provides early boot splash screen coverage(2)

This configuration should resolve the dependency issues and allow Plymouth to build successfully with your static logo.

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,

Based on the file setup and configs as per the above given result is added in the yocto build but stil now im facing the error issue I can’t go through the documentation also becasue it were always causing an error. what’s the correct solution to add the plymouth splash screen in linux in my verdin imx8mp board.

meta-custom Layer:

hari@Administrator:~/oe-core/layers/meta-custom$ tree .
.
├── COPYING.MIT
├── README
├── conf
│   └── layer.conf
└── recipes-core
    └── plymouth
        ├── files
        │   ├── lokbest_logo.png
        │   └── spinner.plymouth
        └── plymouth_%.bbappend

4 directories, 6 files
hari@Administrator:~/oe-core/layers/meta-custom$ cat conf/layer.conf
# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"

# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
            ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "meta-custom"
BBFILE_PATTERN_meta-custom = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-custom = "6"

# Layer dependencies
LAYERDEPENDS_meta-custom = "core"

LAYERSERIES_COMPAT_meta-custom = "scarthgap"
hari@Administrator:~/oe-core/layers/meta-custom$ cat recipes-core/plymouth/plymouth_%.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += " \
        file://lokbest_logo.png \
        file://spinner.plymouth \
"

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

do_install:append () {
        install -m 0644 ${WORKDIR}/lokbest_logo.png ${D}${datadir}/plymouth/themes/spinner/watermark.png
        install -m 0644 ${WORKDIR}/spinner.plymouth ${D}${datadir}/plymouth/themes/spinner/spinner.plymouth
}
hari@Administrator:~/oe-core/layers/meta-custom$ ls recipes-core/plymouth/files/.
lokbest_logo.png  spinner.plymouth
hari@Administrator:~/oe-core/layers/meta-custom$

local.conf File:

# Enable required features
DISTRO_FEATURES:append = " cellular ppp"

# Add Plymouth Support and its Dependencies
CORE_IMAGE_EXTRA_INSTALL += "plymouth"
INITRAMFS_IMAGE = "initramfs-plymouth-splash-image"
INITRAMFS_FSTYPES = "cpio.gz"

# Chromium Browser (GPU accelerated)
CORE_IMAGE_EXTRA_INSTALL += "chromium-ozone-wayland"

# Accept commercial licensed codecs for Chromium
LICENSE_FLAGS_ACCEPTED += "commercial commercial_libav commercial_x264"

bblayers.conf File:

hari@Administrator:~/oe-core/layers/meta-custom$ cat ../../build/conf/bblayers.conf
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
LCONF_VERSION = "7"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS_NXP ?= " \
  ${TOPDIR}/../layers/meta-toradex-nxp \
  ${TOPDIR}/../layers/meta-freescale \
  ${TOPDIR}/../layers/meta-freescale-3rdparty \
"

BBLAYERS_TI ?= " \
  ${TOPDIR}/../layers/meta-toradex-ti \
  ${TOPDIR}/../layers/meta-arm/meta-arm-toolchain \
  ${TOPDIR}/../layers/meta-arm/meta-arm \
  ${TOPDIR}/../layers/meta-ti/meta-ti-bsp \
  ${TOPDIR}/../layers/meta-ti/meta-ti-extras \
"

BBLAYERS ?= " \
  ${BBLAYERS_NXP} \
  ${BBLAYERS_TI} \
  ${TOPDIR}/../layers/meta-toradex-bsp-common \
  ${TOPDIR}/../layers/meta-openembedded/meta-oe \
  ${TOPDIR}/../layers/meta-openembedded/meta-filesystems \
  ${TOPDIR}/../layers/meta-openembedded/meta-networking \
  ${TOPDIR}/../layers/meta-openembedded/meta-multimedia \
  ${TOPDIR}/../layers/meta-openembedded/meta-python \
  ${TOPDIR}/../layers/meta-freescale-distro \
  ${TOPDIR}/../layers/meta-toradex-demos \
  ${TOPDIR}/../layers/meta-qt5 \
  ${TOPDIR}/../layers/meta-security/meta-tpm \
  ${TOPDIR}/../layers/meta-toradex-distro \
  ${TOPDIR}/../layers/meta-yocto/meta-poky \
  ${TOPDIR}/../layers/openembedded-core/meta \
  /home/hari/oe-core/layers/meta-toradex-chromium \
  ${TOPDIR}/../layers/meta-custom \
  "
BBLAYERS += " ${TOPDIR}/../layers/meta-browser/meta-chromium"
BBLAYERS += " ${TOPDIR}/../layers/meta-openembedded/meta-clang"
BBLAYERS += "/home/hari/oe-core/layers/meta-lokbest"
hari@Administrator:~/oe-core/layers/meta-custom$

Error Result at Yocto build:

hari@Administrator:~/oe-core/build$ bitbake -c cleansstate virtual/kernel
Loading cache: 100% |                                                                                       | ETA:  --:--:--
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |######################################################################################| Time: 0:01:33
Parsing of 3394 .bb files complete (0 cached, 3394 parsed). 5424 targets, 638 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
ERROR: Nothing PROVIDES 'initramfs-plymouth-splash-image'
ERROR: Required build target 'virtual/kernel' has no buildable providers.
Missing or unbuildable dependency chain was: ['virtual/kernel', 'initramfs-plymouth-splash-image']

Summary: There were 2 ERROR messages, returning a non-zero exit code.
hari@Administrator:~/oe-core/build$ bitbake -c cleanall initramfs-plymouth-splash-image
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.
ERROR: Nothing PROVIDES 'initramfs-plymouth-splash-image'

Summary: There was 1 ERROR message, returning a non-zero exit code.
hari@Administrator:~/oe-core/build$ bitbake -c cleanall plymouth
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 'dracut' (but /home/hari/oe-core/build/../layers/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_24.004.60.bb RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'dracut' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['dracut']
ERROR: Required build target 'plymouth' has no buildable providers.
Missing or unbuildable dependency chain was: ['plymouth', 'dracut']

Summary: There were 2 ERROR messages, returning a non-zero exit code.
hari@Administrator:~/oe-core/build$ bitbake -c cleanall tdx-reference-multimedia-image
NOTE: Reconnecting to bitbake server...
Loading cache: 100% |########################################################################################| Time: 0:00:02
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 PROVIDES 'initramfs-plymouth-splash-image'
NOTE: Runtime target 'packagegroup-boot' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['packagegroup-boot', 'virtual/kernel', 'initramfs-plymouth-splash-image']
ERROR: Required build target 'tdx-reference-multimedia-image' has no buildable providers.
Missing or unbuildable dependency chain was: ['tdx-reference-multimedia-image', 'packagegroup-boot', 'virtual/kernel', 'initramfs-plymouth-splash-image']

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

After the changes done for the plymouth recipes I’m still facing the error issues, what is the correct layer and configs to be added for the plymouth splash screen logo setup? Guide me the correct solution for this anyone!..

Solution: Simplified Plymouth Setup for Verdin iMX8MP

The errors you’re experiencing are due to missing dependencies and incorrect configuration. Let’s implement a simplified approach that follows the official Toradex documentation exactly.

Step 1: Remove Problematic Configuration

First, remove the initramfs configuration from your local.conf that’s causing the errors. Update your local.conf to only include(1):

# Enable required features
DISTRO_FEATURES:append = " cellular ppp"

# Add Plymouth Support - SIMPLIFIED APPROACH
CORE_IMAGE_EXTRA_INSTALL += "plymouth"

# Chromium Browser (GPU accelerated)
CORE_IMAGE_EXTRA_INSTALL += "chromium-ozone-wayland"

# Accept commercial licensed codecs for Chromium
LICENSE_FLAGS_ACCEPTED += "commercial commercial_libav commercial_x264"

Remove these problematic lines:

# REMOVE THESE LINES:
# INITRAMFS_IMAGE = "initramfs-plymouth-splash-image"
# INITRAMFS_FSTYPES = "cpio.gz"

Step 2: Verify Your Meta-Custom Layer Structure

Your layer structure looks correct. Ensure your plymouth_%.bbappend follows the exact format from the documentation(1):

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

SRC_URI += " \
	file://lokbest_logo.png \
	file://spinner.plymouth \
"

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

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

(1)

Step 3: Clean and Rebuild

Clean your build environment completely(2):

$ bitbake -c cleanall plymouth
$ bitbake -c cleanall virtual/kernel
$ bitbake -c cleanall tdx-reference-multimedia-image

Then rebuild(2):

$ bitbake tdx-reference-multimedia-image

(2)

Step 4: Verify Plymouth Installation

Check if Plymouth was correctly installed on the image by adding the flag -e to bitbake(1):

$ bitbake -e tdx-reference-multimedia-image | grep plymouth

(1)

Why This Approach Works

  1. Eliminates dependency issues: By removing the initramfs configuration, we avoid the dracut dependency error
  2. Uses standard Plymouth: This follows the basic Plymouth integration as documented(1)
  3. Simplified configuration: Focuses only on the essential Plymouth setup without complex initramfs integration

Expected Result

This simplified approach will:

  • :white_check_mark: Install Plymouth with your custom logo
  • :white_check_mark: Display your splash screen during boot
  • :white_check_mark: Avoid the dependency conflicts you’re experiencing
  • :white_check_mark: Work with your Verdin iMX8MP setup

Alternative: Use Standard Reference Image

If you continue to experience issues, you can test Plymouth functionality first with a standard build by temporarily removing your custom layer and using only:

CORE_IMAGE_EXTRA_INSTALL += "plymouth"

This will help verify that Plymouth itself works on your system before adding your custom logo.

The simplified approach eliminates the complex initramfs setup that was causing your build failures while still providing Plymouth splash screen functionality for your Verdin iMX8MP.

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 removed the unwanted package configs and corrected the plymouth bbappend file it seems till now the error result at the build, why?

I have also checked by removing the bblayer of meta-custom and check only with the plymouth config in the locol.conf file, it only returns the error at build!..

Error-Result:

hari@Administrator:~/oe-core/build$ bitbake -c cleanall tdx-reference-multimedia-image
Loading cache: 100% |                                                                                       | ETA:  --:--:--
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |######################################################################################| Time: 0:01:37
Parsing of 3394 .bb files complete (0 cached, 3394 parsed). 5424 targets, 638 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
ERROR: Nothing RPROVIDES 'dracut' (but /home/hari/oe-core/build/../layers/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_24.004.60.bb RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'dracut' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['dracut']
NOTE: Runtime target 'plymouth' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['plymouth', 'dracut']
ERROR: Required build target 'tdx-reference-multimedia-image' has no buildable providers.
Missing or unbuildable dependency chain was: ['tdx-reference-multimedia-image', 'plymouth', 'dracut']

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

(1), (2)

Solution: Missing Layer Dependencies for Plymouth

The persistent dracut dependency error indicates that Plymouth requires additional layers that are not included in your current BSP setup. This is a known issue with Plymouth on certain Yocto configurations.

Root Cause Analysis

The error shows that Plymouth version 24.004.60 from meta-openembedded/meta-oe has a runtime dependency on dracut which is not available in your layer configuration. This suggests that your current BSP layers don’t include all the dependencies required for Plymouth.

Solution: Add Missing Meta Layer

You need to add the meta-initramfs layer to your build configuration. Add this to your bblayers.conf file(3):

BBLAYERS ?= " \
  ${BBLAYERS_NXP} \
  ${BBLAYERS_TI} \
  ${TOPDIR}/../layers/meta-toradex-bsp-common \
  ${TOPDIR}/../layers/meta-openembedded/meta-oe \
  ${TOPDIR}/../layers/meta-openembedded/meta-filesystems \
  ${TOPDIR}/../layers/meta-openembedded/meta-initramfs \
  ${TOPDIR}/../layers/meta-openembedded/meta-networking \
  ${TOPDIR}/../layers/meta-openembedded/meta-multimedia \
  ${TOPDIR}/../layers/meta-openembedded/meta-python \
  ${TOPDIR}/../layers/meta-freescale-distro \
  ${TOPDIR}/../layers/meta-toradex-demos \
  ${TOPDIR}/../layers/meta-qt5 \
  ${TOPDIR}/../layers/meta-security/meta-tpm \
  ${TOPDIR}/../layers/meta-toradex-distro \
  ${TOPDIR}/../layers/meta-yocto/meta-poky \
  ${TOPDIR}/../layers/openembedded-core/meta \
  /home/hari/oe-core/layers/meta-toradex-chromium \
  ${TOPDIR}/../layers/meta-custom \
  "

Alternative Solution: Use Different Plymouth Configuration

If the meta-initramfs layer is not available in your BSP version, modify your local.conf to use a different Plymouth configuration approach:

# Plymouth without dracut dependency
CORE_IMAGE_EXTRA_INSTALL += "plymouth plymouth-lite"

# Alternative: Use psplash instead of Plymouth
# CORE_IMAGE_EXTRA_INSTALL += "psplash"

Verification Steps

  1. Check available layers(4):
$ find ../layers -name "*initramfs*" -type d
  1. Verify Plymouth recipe dependencies:
$ bitbake -e plymouth | grep RDEPENDS
  1. Clean and rebuild(1):
$ bitbake -c cleanall plymouth
$ bitbake tdx-reference-multimedia-image

BSP Version Compatibility

The dracut dependency issue suggests you might be using a BSP version where Plymouth has different dependencies than expected. The documentation shows that Plymouth should work with the standard BSP layers(2), but some versions may require additional configuration.

Recommended Next Steps

  1. First, try adding the meta-initramfs layer if it exists in your BSP
  2. If that layer is not available, consider using psplash as an alternative splash screen solution
  3. Verify your BSP version compatibility with Plymouth

The key issue is that Plymouth requires initramfs-related dependencies that are not included in your current layer configuration. Adding the appropriate layer should resolve the dependency chain error you’re experiencing.

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,

this is my device and OS bsp version are

root@verdin-imx8mp-15722251:~# 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=665c13de-02 ro rootwait console=tty1 console=ttymxc2,115200 quiet loglevel=0 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-15722251
------------------------------------------------------------

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

BSP 7.5.0 Plymouth Configuration Solution

Based on your device information showing BSP 7.5.0-devel on Verdin iMX8M Plus, I can provide the correct solution for Plymouth configuration.

Key Issue with Your Current Setup

Your BSP version (7.5.0) has specific Plymouth configuration requirements. The dracut dependency error you’re experiencing is common with certain Plymouth configurations on this BSP version.

Solution: Modified Plymouth Configuration

Based on community experience with similar setups(1), you need to modify your Plymouth configuration. Here’s the corrected approach:

1. Update Your Plymouth BBAppend

Modify your recipes-core/plymouth/plymouth_%.bbappend to include the correct PACKAGECONFIG(1):

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

SRC_URI += " \
	file://lokbest_logo.png \
	file://spinner.plymouth \
"

PACKAGECONFIG:append = " pango drm "
EXTRA_OECONF += "--with-runtimedir=/run"

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

2. Kernel Command Line Configuration

For your BSP 7.5.0 setup, you’ll need to add Plymouth-specific kernel parameters. You can set these using U-Boot environment variables(2):

setenv tdxargs 'quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3'
saveenv

(2)

3. Local.conf Configuration

Keep your local.conf simple:

# Enable required features
DISTRO_FEATURES:append = " cellular ppp"

# Add Plymouth Support
CORE_IMAGE_EXTRA_INSTALL += "plymouth"

# Chromium Browser (GPU accelerated)
CORE_IMAGE_EXTRA_INSTALL += "chromium-ozone-wayland"

# Accept commercial licensed codecs for Chromium
LICENSE_FLAGS_ACCEPTED += "commercial commercial_libav commercial_x264"

Why This Configuration Works

  1. PACKAGECONFIG:append - This appends “pango drm” to the existing configuration instead of overwriting it(1)
  2. DRM support - Essential for your Verdin iMX8M Plus graphics(1)
  3. Simplified dependencies - Avoids the dracut dependency issues

Build Process

Clean and rebuild with the corrected configuration:

$ bitbake -c cleanall plymouth
$ bitbake -c cleanall tdx-reference-multimedia-image
$ bitbake tdx-reference-multimedia-image

Expected Timeline

Based on community feedback(1), with this configuration you should see your logo appear approximately 10 seconds into the boot process. The logo will display during the kernel loading phase, replacing the blank screen period you’re currently experiencing.

This approach has been successfully tested on Verdin iMX8MP modules with similar BSP versions and resolves the dependency conflicts you’ve been encountering(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,

After changes done in the plymouth bbappend and local.conf file, there is no success and correct result for my requirement I’ve very disappointment on it to set the splash screen logo in kernel space.

local.conf File:

# Enable required features
DISTRO_FEATURES:append = " cellular ppp"

# Add Plymouth Support
CORE_IMAGE_EXTRA_INSTALL += "plymouth"

# Chromium Browser (GPU accelerated)
CORE_IMAGE_EXTRA_INSTALL += "chromium-ozone-wayland"

# Accept commercial licensed codecs for Chromium
LICENSE_FLAGS_ACCEPTED += "commercial commercial_libav commercial_x264"

meta-custom Layer:

hari@Administrator:~/oe-core/layers/meta-custom$ tree .
.
├── COPYING.MIT
├── README
├── conf
│   └── layer.conf
└── recipes-core
    └── plymouth
        ├── files
        │   ├── lokbest_logo.png
        │   └── spinner.plymouth
        └── plymouth_%.bbappend

4 directories, 6 files
hari@Administrator:~/oe-core/layers/meta-custom$ cat recipes-core/plymouth/plymouth_%.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += " \
        file://lokbest_logo.png \
        file://spinner.plymouth \
"

PACKAGECONFIG:append = " pango drm "
EXTRA_OECONF += "--with-runtimedir=/run"

do_install:append () {
        install -m 0644 ${WORKDIR}/lokbest_logo.png ${D}${datadir}/plymouth/themes/spinner/watermark.png
        install -m 0644 ${WORKDIR}/spinner.plymouth ${D}${datadir}/plymouth/themes/spinner/spinner.plymouth
}
hari@Administrator:~/oe-core/layers/meta-custom$

Error-Result:

hari@Administrator:~/oe-core/build$ bitbake -c cleanall plymouth
Loading cache: 100% |########################################################################################| Time: 0:00:01
Loaded 5422 entries from dependency cache.
Parsing recipes: 100% |######################################################################################| Time: 0:00:02
Parsing of 3394 .bb files complete (3391 cached, 3 parsed). 5424 targets, 638 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
ERROR: Nothing RPROVIDES 'dracut' (but /home/hari/oe-core/build/../layers/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_24.004.60.bb RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'dracut' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['dracut']
ERROR: Required build target 'plymouth' has no buildable providers.
Missing or unbuildable dependency chain was: ['plymouth', 'dracut']

Summary: There were 2 ERROR messages, returning a non-zero exit code.
hari@Administrator:~/oe-core/build$ bitbake -c cleanall tdx-reference-multimedia-image
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 'dracut' (but /home/hari/oe-core/build/../layers/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_24.004.60.bb RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'dracut' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['dracut']
NOTE: Runtime target 'plymouth' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['plymouth', 'dracut']
ERROR: Required build target 'tdx-reference-multimedia-image' has no buildable providers.
Missing or unbuildable dependency chain was: ['tdx-reference-multimedia-image', 'plymouth', 'dracut']

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

Finally, what is the exact solution for this plymouth splash screen setup?

Final Solution: Alternative Approach for BSP 7.5.0

The persistent dracut dependency error indicates that Plymouth in your BSP version has incompatible dependencies. Based on the documentation and your BSP 7.5.0 setup, here’s the definitive solution:

Solution 1: Remove Plymouth and Use Alternative Splash Method

Since Plymouth continues to fail with dependency issues on your BSP version, remove Plymouth from your configuration and use the kernel-level approach instead.

Update Your local.conf

# Enable required features
DISTRO_FEATURES:append = " cellular ppp"

# Remove Plymouth - it has dependency issues
# CORE_IMAGE_EXTRA_INSTALL += "plymouth"

# Chromium Browser (GPU accelerated)
CORE_IMAGE_EXTRA_INSTALL += "chromium-ozone-wayland"

# Accept commercial licensed codecs for Chromium
LICENSE_FLAGS_ACCEPTED += "commercial commercial_libav commercial_x264"

Remove meta-custom Layer Temporarily

Remove your meta-custom layer from bblayers.conf to eliminate the Plymouth configuration:

# Comment out or remove this line from bblayers.conf:
# ${TOPDIR}/../layers/meta-custom \

Solution 2: Use Kernel Command Line for Logo Display

For your Verdin iMX8MP, you can implement a splash screen using kernel command line parameters(1). Based on the Japanese documentation example, modify your U-Boot environment:

Set Kernel Parameters via U-Boot

Access U-Boot console and set these parameters(1):

setenv tdxargs 'quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3'
setenv bootdelay 0
saveenv && reset

(1)

Solution 3: Alternative - Use PSplash Instead

If you need a splash screen solution that works with your BSP, consider using psplash instead of Plymouth:

Update local.conf for PSplash

# Enable required features
DISTRO_FEATURES:append = " cellular ppp"

# Use PSplash instead of Plymouth
CORE_IMAGE_EXTRA_INSTALL += "psplash"

# Chromium Browser (GPU accelerated)
CORE_IMAGE_EXTRA_INSTALL += "chromium-ozone-wayland"

# Accept commercial licensed codecs for Chromium
LICENSE_FLAGS_ACCEPTED += "commercial commercial_libav commercial_x264"

Why Plymouth Fails in Your Setup

The error shows that Plymouth version 24.004.60 from meta-openembedded/meta-oe has a hard dependency on dracut which is not available in your BSP layer configuration. This is a known compatibility issue with certain BSP versions.

Recommended Next Steps

  1. Clean your build completely:
$ rm -rf tmp-glibc/
$ bitbake tdx-reference-multimedia-image

(2)

  1. Test without Plymouth first to ensure your base system builds correctly

  2. If you need early boot logo, use the kernel command line approach with U-Boot environment variables(1)

  3. For application-level splash screens, implement them in your application code after the system boots

Expected Result

This approach will:

  • :white_check_mark: Eliminate the dependency conflicts you’re experiencing
  • :white_check_mark: Allow your system to build successfully
  • :white_check_mark: Provide alternative splash screen options that work with your BSP version
  • :white_check_mark: Give you a working system without Plymouth complications

The persistent Plymouth dependency issues suggest that your BSP configuration is not compatible with the current Plymouth implementation. Using alternative approaches will give you a working solution for your Verdin iMX8MP setup.

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.