U-Boot Splash Screen Issue on Verdin iMX8MP (Custom Ivy Carrier Board, HDMI, Yocto BSP 7.5 Scarthgap)

Description Statement

Hello Toradex Community,

I am working on a custom Yocto OS build (Toradex BSP 7.5 – Scarthgap) for the Verdin iMX8MP SoM mounted on a customized Ivy Carrier Board.
The Linux graphics stack (Wayland + Weston) is working perfectly with our HDMI-connected Lilliput 10.1" capacitive touch display, and the application starts and runs correctly after boot.
However, I am unable to configure and display a U-Boot splash screen (boot logo) during early boot.
Additionally, kernel boot logs are visible on the HDMI display before the application starts, which I would like to disable.
Due to hardware constraints on our custom carrier board, UART console access for U-Boot is currently not available, which makes U-Boot debugging and interaction difficult.

I am looking for guidance from anyone who has successfully implemented U-Boot splash on Verdin iMX8MP using Yocto, especially with HDMI output.

Hardware Configuration

  • SoM: Toradex Verdin iMX8MP
  • Carrier Board: Custom Ivy Carrier Board (HDMI enabled)

Display

  • HDMI-connected Lilliput 10.1" capacitive touch display
  • Works correctly under Linux (Weston / Wayland)

UART Console

  • Ivy Carrier Board J17 UART pins are not routed
  • No UART access for U-Boot console

USB-OTG

  • Used only for flashing (not for console access)

Operating System (Running on Device)

ID=tdx-xwayland
NAME="TDX Wayland with XWayland"
VERSION="7.5.0-devel-20251114145026+build.0 (scarthgap)"
VERSION_ID=7.5.0-devel-20251114145026-build.0
VERSION_CODENAME="scarthgap"
PRETTY_NAME="TDX Wayland with XWayland 7.5.0-devel-20251114145026+build.0 (scarthgap)"
Kernel: Linux 6.6.101-7.5.0-devel
Architecture: arm64

Linux verdin-imx8mp 6.6.101-7.5.0-devel #1 SMP PREEMPT aarch64 GNU/Linux

Yocto Build Configuration

BB_VERSION      = "2.8.1"
BUILD_SYS       = "x86_64-linux"
NATIVELSBSTRING = "ubuntu-22.04"
TARGET_SYS      = "aarch64-tdx-linux"
MACHINE         = "verdin-imx8mp"
DISTRO          = "tdx-xwayland"
DISTRO_VERSION  = "7.5.0-devel-20251223110058+build.0"
Kernel Version  = 6.6.x
Yocto Release   = Scarthgap

Current Status

:check_mark: HDMI display works correctly once Linux boots
:check_mark: Weston compositor and application start normally
:check_mark: Touch input works
:cross_mark: U-Boot splash screen does not appear
:cross_mark: Kernel boot logs appear on HDMI before application
:cross_mark: No UART access to interrupt or debug U-Boot

What I Have Tried (Summary)

  • Created a custom meta-layer for U-Boot
  • Attempted to:
    • Enable CONFIG_SPLASH_SCREEN and CONFIG_CMD_BMP
    • Add splash BMP image (8-bit, BMP3 format)
    • Apply U-Boot config fragments via Yocto

Issues observed

  • U-Boot config fragments are not consistently applied
  • Build errors occur when enabling HDMI-related U-Boot video options
  • Splash logo never appears on HDMI during U-Boot

Key Challenges

1. No UART Console Access

  • Ivy Carrier Board UART pins are not routed
  • Cannot interrupt U-Boot or view U-Boot logs
  • Need alternative methods (USB, Yocto-based env setup, or early framebuffer)

2. U-Boot HDMI Splash Not Displaying

  • Linux HDMI works correctly
  • U-Boot HDMI initialization appears incomplete or disabled
  • Unsure which U-Boot video options are supported/safe on iMX8MP

3. Kernel Logs Visible Before Application

  • Goal is a clean boot sequence:
    • U-Boot splash → application
    • No kernel log spam on HDMI

What I Need Help With

:one: U-Boot splash screen setup on Verdin iMX8MP (HDMI)
:two: Accessing or debugging U-Boot without UART console
:three: Yocto-only solution using a custom meta-layer (no manual flashing)
:four: Disabling kernel boot logs on the display

Request to the Community

If anyone has:

  • Successfully enabled U-Boot splash on Verdin iMX8MP
  • Experience with HDMI splash in U-Boot
  • Knowledge of UART-less U-Boot access or debugging
  • A Toradex-recommended or supported approach

Please share your guidance, configuration examples, or references.

Thank you for your support.

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 the documentation, I need to address several important limitations regarding U-Boot splash screens on iMX8-based modules.

U-Boot Splash Screen Limitations on iMX8MP

Unfortunately, U-Boot splash screen is not supported out of the box on i.MX8-based modules, including the Verdin iMX8MP (1)(2). The reason is that mainline U-Boot does not support video displays for these SoCs (1).

The Verdin iMX8MP module only has a native MIPI DSI interface, and you need to have a smooth transition of video handling between U-Boot and the Linux kernel (1). Under Linux, there are drivers for bridges (e.g., DSI to LVDS, or DSI to HDMI), but they are not supported in U-Boot yet (1).

Documentation Clarification

The official documentation states that for Torizon OS, the customization of the bootloader splash screen is currently not covered as a use case (3). Although the instructions provided in the splash screen article might work, Toradex does not encourage you to re-build the components of Torizon OS from the source (3).

Alternative Approaches

1. Early Linux Splash Screen

Since U-Boot splash is not supported on iMX8MP, consider implementing an early Linux splash screen instead. You can suppress kernel boot logs and show a splash screen as early as the initramfs is loaded.

2. Kernel Parameter Configuration

To hide kernel boot logs on your HDMI display, you can modify kernel parameters using the tdxargs environment variable in U-Boot (4):

setenv tdxargs "quiet logo.nologo vt.global_cursor_default=0"
saveenv

(4)

3. Boot Time Optimization

Focus on optimizing boot time to minimize the delay before your application starts, reducing the time users see a blank screen.

UART Console Alternatives

For debugging without UART access, you can:

  • Use USB-based debugging methods
  • Configure U-Boot environment variables through Yocto build configuration
  • Implement early framebuffer logging if needed

Recommendations

  1. Focus on Linux-level splash screens rather than U-Boot splash for iMX8MP
  2. Use kernel parameters to suppress boot logs on the display
  3. Optimize boot time to minimize the blank screen period
  4. Consider the display initialization timing in your custom carrier board design

The lack of U-Boot video support on iMX8-based modules is a known limitation, and the recommended approach is to implement splash functionality at the Linux kernel level 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,
Thanks for confirming the U-Boot video limitation on Verdin iMX8MP.
To proceed with a supported and production-ready solution, could you please clarify the following:

  1. Is it confirmed that U-Boot splash/logo output on HDMI is not supported on Verdin iMX8MP in BSP 7.5 (Scarthgap)?
  2. What is the earliest supported Linux stage to display a splash screen on HDMI on Verdin iMX8MP?
  3. What is the Toradex-recommended method to achieve:
    * no text output
    * early splash
    * smooth transition to Wayland/Weston?
  4. Are the kernel parameters below fully supported on BSP 7.5 for hiding boot logs on HDMI?
   quiet loglevel=0 logo.nologo vt.global_cursor_default=0
  1. Are there additional DRM/HDMI kernel parameters required on iMX8MP to suppress early messages?
  2. What is the recommended Yocto mechanism to set kernel cmdline arguments when UART access is unavailable?
  3. Can kernel log suppression and early splash be done purely via a custom Yocto meta-layer (no runtime changes)?
  4. Without UART console, what are the supported ways to access or control U-Boot?
    * Yocto build-time config only?
    * USB (DFU / fastboot)?
    * predefined U-Boot environment variables?
  5. Is there a Toradex reference or example (doc, layer, image) showing a clean HDMI boot on iMX8MP?
  6. Can you confirm the best-practice boot flow on Verdin iMX8MP as:

    No U-Boot splash → Early Linux splash → Wayland/Weston app

U-Boot and Kernel Parameter Configuration for Verdin iMX8MP

Based on the official documentation, I can provide specific guidance on your questions:

1. U-Boot Environment Variables and Kernel Parameters

For kernel parameter configuration on Verdin iMX8MP, you can use the tdxargs environment variable(1). This is a Toradex-specific variable that contains kernel arguments used in Toradex BSPs(1).

The kernel parameters you mentioned are supported. The tdxargs variable is set dynamically and contains kernel parameters(1).

2. U-Boot Environment Management Without UART

When UART access is unavailable, you have several options for U-Boot environment management:

Environment Variable Persistence: When using setenv and printenv on U-Boot serial console, you are dealing with the RAM representation of the environment(2). Changes made with setenv will only be valid for the current U-Boot instance(2). To ensure that the changes persist, you need to manually call saveenv, which will write the entire environment to the preconfigured non-volatile location(2).

Build-time Configuration: You can configure U-Boot environment variables through Yocto build configuration. The default environment is set in compilation time and is built into the U-Boot binary(2).

3. HDMI Display Configuration

For HDMI output on iMX8 series modules, the documentation shows that enabling the HDMI overlay is needed(3):

# cp /boot/overlays.txt ~/overlays_backup.txt
# echo "fdt_overlays=apalis-imx8_hdmi_overlay.dtbo" > /boot/overlays.txt
# sync
# reboot

(3)

A connected monitor provides the modes it is capable of displaying and its preferred mode through DDC/EDID(3). The kernel then decides on the mode depending on the capabilities of the monitor and the SoM(3).

To force one of the possible modes, add the desired mode on the kernel command line(3):

video=HDMI-A-1:1280x720

(3)

4. Yocto Build Configuration

For cross-compilation setup, you need to configure environment variables such as ARCH and CROSS_COMPILE(4). For 64-bit Arm (which applies to Verdin iMX8MP), you would use(4):

export ARCH=arm64
export PATH=${HOME}/gcc-linaro-aarch64/bin/:${PATH}
export DTC_FLAGS='-@'
export CROSS_COMPILE=aarch64-none-linux-gnu-

(4)

5. Boot Time Optimization Considerations

For reducing boot time, you can reduce the boot delay by setting the bootdelay environment variable to a lower value or zero(5). You can also optimize the kernel command line by minimizing console outputs and removing or reducing the verbosity of console messages to speed up the boot process(5).

6. Recommendations

Based on the documentation:

  1. Use tdxargs for kernel parameters - This is the Toradex-specific variable for kernel arguments(1)
  2. Configure HDMI overlay properly - Ensure the correct overlay is loaded for HDMI output(3)
  3. Manage environment variables carefully - Use saveenv to persist changes when needed(2)
  4. Consider build-time configuration - For systems without UART access, build-time environment configuration is recommended(2)

The documentation confirms that the approach should focus on Linux-level display initialization rather than U-Boot splash screens for iMX8-based modules, with proper kernel parameter configuration for a clean boot experience.

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.

Follow-up Questions to @ToradexAI

  1. Which Toradex SoMs officially support U-Boot splash screen output?
    (Please list the supported modules)

  2. For the supported modules, which display interfaces are supported in U-Boot splash?

  3. Is U-Boot splash officially supported on any i.MX8 family SoMs, or is it limited to pre-i.MX8 platforms only?

  4. Is Verdin iMX8MP explicitly unsupported for U-Boot splash, or only unsupported for HDMI-based splash?

  5. Is there an official Toradex documentation or matrix that lists U-Boot splash support per SoM and display interface?

  6. For platforms where U-Boot splash is supported, is Yocto-based configuration (config fragments / meta-layer) the recommended method?

U-Boot Splash Screen Support Across Toradex Modules

Supported Modules and Display Interfaces

Based on the official documentation, U-Boot splash screen support is available for specific Toradex modules with framebuffer support(1). The documentation states that “If U-Boot supports the framebuffer, U-Boot can be used to display a splash screen or a custom company logo”(1).

Configuration Requirements

For supported modules, U-Boot can read a specific image format(1). The process involves:

  1. Image Format: Converting images to BMP format using specific parameters(1):
convert testlogo.png -type Palette -colors 224 -depth 8 -compress none -verbose BMP3:testlogo.bmp

(1)

  1. Build Configuration: 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).

iMX8 Family Limitations

The documentation and community discussions confirm that U-Boot splash screen is not supported on iMX8-based modules(2)(3)(4):

  • Mainline U-Boot limitation: “Mainline U-boot doesn’t support video displays on i.MX8-based modules”(2)
  • NXP support status: “The support for U-boot splash screen on i.MX8 was dropped by NXP”(3)
  • Verdin iMX8MP specific: “U boot splash screen is not supported out of the box on i.MX8-based modules, the reason being the mainline U-boot not supporting video displays for these SOCs”(4)

Alternative Solutions

For iMX8-based modules, including Verdin iMX8MP, the recommended approach is:

  1. Plymouth Splash Screen: “We recommend using the Plymouth splash screen instead”(3)
  2. Linux Kernel Level: Focus on Linux-level splash screens rather than U-Boot splash(5)

Yocto Configuration Method

For modules that do support U-Boot splash, the documentation shows that Yocto-based configuration using custom meta-layers is the recommended method(1). The process involves:

  1. Custom U-Boot Build: Following the U-Boot source building instructions(1)
  2. Image Replacement: Replacing the default logo file in the U-Boot source(1)
  3. Configuration Fragments: Using Yocto to apply U-Boot configuration changes(6)

Summary

  • iMX8 Family: U-Boot splash is not supported (including Verdin iMX8MP)
  • Pre-iMX8 Modules: U-Boot splash is supported with framebuffer-capable modules
  • Recommended Alternative: Use Plymouth or early Linux splash screens for iMX8-based modules
  • Configuration Method: Yocto-based meta-layer approach for supported modules

The documentation does not provide a comprehensive matrix of all supported modules, but clearly indicates that iMX8-based modules require alternative splash screen approaches at the Linux kernel level rather than U-Boot level.

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 help to setup the yocto build layer recipes files and its supported bbappend for the kernel linux logo, I have used the plymouth service but it was fail with bsp version on dracut dependencies is needed for that.

Alternate I got the solution to add the psplash in the local conf but how the logo and its bbappend files should be present in the custom layer recipes folder?

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

Custom Meta Layer Setup for PSplash with Logo

Based on the official documentation, I’ll guide you through setting up a custom meta layer for PSplash with a custom logo(1).

1. Create Your Custom Meta Layer

First, create your custom meta layer following the Toradex documentation(1):

# Run `. export` or `source setup-environment` when building Torizon OS  

$ . export # will take you to the `build` directory  
$ bitbake-layers create-layer ../layers/meta-customer # inside the build directory  

(1)

2. Directory Structure for PSplash

Create the following directory structure in your custom meta layer(1):

$ cd ../layers/meta-customer/
$ mkdir -p recipes-core/psplash/psplash
$ mkdir -p recipes-core/psplash/files

3. Add Your Custom Logo

Place your custom logo in the appropriate directory. The logo should be in a supported format (typically PNG or BMP).

4. Create PSplash bbappend File

Create a psplash_git.bbappend file in your custom layer(1):

$ touch recipes-core/psplash/psplash_git.bbappend

5. Configure the bbappend File

Based on the documentation structure, your psplash_git.bbappend should look like this(1):

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

SRC_URI += "file://your-custom-logo.png"

# Add any additional configuration files if needed
SRC_URI += "file://psplash-config.h"

(1)

6. Add Layer to bblayers.conf

Add your custom layer to the conf/bblayers.conf file(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-customer \
"

(1)

7. Initialize Git Project (Mandatory for Torizon OS)

If you’re building Torizon OS, initialize git in your custom layer(1):

$ git init  
$ git commit -m "Initial Commit" -m "Add <meta-mylayer> from template"  

(1)

8. Add PSplash to Your Image

In your build/conf/local.conf, add PSplash to your image(1):

IMAGE_INSTALL:append = " psplash"

(1)

9. Build Your Image

Build your image with the custom layer(1):

$ bitbake <your-image>  

(1)

Important Notes

  • File Paths: Ensure your logo files are placed in the correct directory structure within your custom meta layer(1)
  • Git Requirement: For Torizon OS, all custom layers must be version controlled by Git(1)
  • Layer Priority: Make sure your custom layer has the appropriate priority to override default PSplash configurations(1)

This approach follows the Toradex-recommended method for customizing Yocto builds using custom meta layers and bbappend files, which is the proper way to integrate custom splash screens into your BSP build(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 have the meta-custom layer used for the plymouth service so use this for the modification of psplash recipes,

hari@Administrator:~/oe-core$ tree layers/meta-custom/.
layers/meta-custom/.
├── 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$ cat layers/meta-custom/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$ cat layers/meta-custom/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$ cat layers/meta-custom/recipes-core/plymouth/files/spinner.plymouth
[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
hari@Administrator:~/oe-core$

My device version and info is,

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:~#

Converting Your Plymouth Layer to PSplash

Based on the official documentation and your existing meta-custom layer structure, here’s how to modify it for PSplash (1).

1. Modify Your Layer Structure

Your existing layer structure is good. You’ll need to create a new directory for PSplash:

mkdir -p layers/meta-custom/recipes-core/psplash/psplash
mkdir -p layers/meta-custom/recipes-core/psplash/files

2. Create PSplash bbappend File

Create layers/meta-custom/recipes-core/psplash/psplash_git.bbappend (1):

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

SRC_URI += "file://lokbest_logo.png"

# Override the default logo
do_install:append() {
    # Install custom logo as splash image
    install -m 0644 ${WORKDIR}/lokbest_logo.png ${D}${datadir}/psplash/
}

(1)

3. Move Your Logo File

Copy your existing logo to the PSplash directory:

cp layers/meta-custom/recipes-core/plymouth/files/lokbest_logo.png \
   layers/meta-custom/recipes-core/psplash/files/

4. Update Your local.conf

In your build/conf/local.conf, replace Plymouth with PSplash (1):

# Remove Plymouth and add PSplash
IMAGE_INSTALL:append = " psplash"

# Optional: Configure PSplash behavior
SPLASH_IMAGES = "file://lokbest_logo.png"

(1)

5. Plymouth Configuration Issue Resolution

Based on the community discussion, the Plymouth issue you encountered is related to missing drm support in the default PACKAGECONFIG (2). A community member resolved this by modifying the PACKAGECONFIG:

PACKAGECONFIG:append = " pango drm "

(2)

However, since you’re switching to PSplash, this configuration won’t be needed.

6. Kernel Parameters for Clean Boot

Your current kernel command line already has good parameters for hiding boot logs:

quiet loglevel=0 vt.global_cursor_default=0 vt.default_redraw=0

These parameters are properly configured for a clean boot experience on your Verdin iMX8MP.

7. Build Your Updated Image

After making these changes, rebuild your image (1):

$ bitbake <your-image>

(1)

8. Git Commit Requirements

Since you’re using a custom layer, ensure it’s properly version controlled (1):

cd layers/meta-custom
git add .
git commit -m "Convert from Plymouth to PSplash with custom logo"

(1)

Key Differences: Plymouth vs PSplash

  • PSplash is simpler and has fewer dependencies than Plymouth
  • PSplash works better with BSP 7.5 without requiring additional dracut dependencies
  • PSplash provides basic splash screen functionality without the complexity of Plymouth themes

Your existing meta-custom layer structure is perfect for this conversion, and PSplash should work reliably on your Verdin iMX8MP with BSP 7.5.

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 the followed the steps for the psplash custom later setup but while I build the image it were failed!..

meta-custom Layer:

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

4 directories, 5 files
hari@Administrator:~/oe-core/layers$ cat meta-custom/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$ file meta-custom/recipes-core/psplash/files/lokbest_logo.png
meta-custom/recipes-core/psplash/files/lokbest_logo.png: PNG image data, 887 x 267, 8-bit/color RGBA, non-interlaced
hari@Administrator:~/oe-core/layers$ file meta-custom/recipes-core/psplash/psplash_git.bbappend
meta-custom/recipes-core/psplash/psplash_git.bbappend: ASCII text
hari@Administrator:~/oe-core/layers$ cat meta-custom/recipes-core/psplash/psplash_git.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += "file://lokbest_logo.png"

do_install:append() {
    install -m 0644 ${WORKDIR}/lokbest_logo.png ${D}${datadir}/psplash/
}
hari@Administrator:~/oe-core/layers$

local.conf File:

# ===== Basic Tools and System Utilities =====
IMAGE_INSTALL:append = " \
    nano \
    curl wget \
    weston wayland-utils \
    modemmanager \
    ppp \
    ppp-dialin \
    ppp-tools \
    libqmi \
    libmbim \
    usb-modeswitch \
    ppp \
    xdg-utils \
    unclutter-xfixes \
"

# Production Runtime Tools
IMAGE_INSTALL:append = " zip tree parted smartmontools dnsmasq"

# Disable Demo Media
IMAGE_INSTALL:remove = "media-files"

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

# Remove Plymouth and add PSplash
IMAGE_INSTALL:append = " psplash"

# Optional: Configure PSplash behavior
SPLASH_IMAGES = "file://lokbest_logo.png"

bblayers.conf File:

hari@Administrator:~/oe-core/layers$ 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$

Where did the changes need here to build the image without an error?

PSplash Configuration Issues and Solutions

I need to see the specific build error to provide targeted assistance. However, I can identify several potential issues in your configuration based on the Toradex documentation.

1. PSplash Directory Structure Issue

Your current bbappend file attempts to install the logo in a directory that may not exist. The do_install:append() function should create the directory first(1):

do_install:append() {
    install -d ${D}${datadir}/psplash/
    install -m 0644 ${WORKDIR}/lokbest_logo.png ${D}${datadir}/psplash/
}

(1)

2. Image Format Requirements

PSplash typically requires specific image formats. Based on the U-Boot documentation, images should be converted to specific formats(2). Your PNG image might need conversion:

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

(2)

3. SPLASH_IMAGES Configuration Issue

The SPLASH_IMAGES variable in your local.conf might be incorrectly configured. Remove this line from local.conf:

# Remove this line - it may cause conflicts
# SPLASH_IMAGES = "file://lokbest_logo.png"

4. Correct PSplash bbappend Configuration

Based on the documentation structure, your psplash bbappend should follow this pattern(1):

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

SRC_URI += "file://lokbest_logo.png"

do_install:append() {
    # Create directory if it doesn't exist
    install -d ${D}${datadir}/psplash/
    # Install the custom logo
    install -m 0644 ${WORKDIR}/lokbest_logo.png ${D}${datadir}/psplash/splash.png
}

(1)

5. Alternative Plymouth Approach

Since you mentioned Plymouth failed due to dracut dependencies, you could also try the Plymouth approach from the official documentation(3). The documentation shows how to properly configure Plymouth with custom logos:

CORE_IMAGE_EXTRA_INSTALL += "plymouth"

(3)

And create the proper Plymouth configuration following the documented structure(3):

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
}

(3)

6. Debug Steps

To identify the specific issue:

  1. Check the build log for the exact error message
  2. Verify layer inclusion with: bitbake-layers show-layers
  3. Test PSplash recipe separately: bitbake psplash

7. Recommended Fix

Update your psplash_git.bbappend file:

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

SRC_URI += "file://lokbest_logo.png"

do_install:append() {
    install -d ${D}${datadir}/psplash/
    install -m 0644 ${WORKDIR}/lokbest_logo.png ${D}${datadir}/psplash/psplash-img.png
}

(1)

And remove the SPLASH_IMAGES line from your local.conf.

Please share the specific build error message so I can provide more targeted assistance.

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,

whats the difference between the image install in local.conf of psplash,

CORE_IMAGE_EXTRA_INSTALL += “psplash”

and

IMAGE_INSTALL:append = " psplash"

Based on the official Toradex documentation, I can explain the key differences between these two Yocto variable approaches:

CORE_IMAGE_EXTRA_INSTALL vs IMAGE_INSTALL:append

1. CORE_IMAGE_EXTRA_INSTALL

The CORE_IMAGE_EXTRA_INSTALL variable is used to add packages to the core image(1). In the documentation, you can see this approach used for adding Node.js components:

CORE_IMAGE_EXTRA_INSTALL += "nodejs nodejs-npm"  

(1)

2. IMAGE_INSTALL:append

The IMAGE_INSTALL:append variable is used to append packages to an existing image(2). The documentation shows this approach for adding packages to custom images:

IMAGE_INSTALL:append = " hello-world"  

(2)

Key Differences

Scope and Application

  • CORE_IMAGE_EXTRA_INSTALL: Typically used for adding packages to core/base images and is often used in distro configurations
  • IMAGE_INSTALL:append: Used for appending packages to any image recipe and is commonly used in local.conf or custom image recipes

Syntax Differences

  • CORE_IMAGE_EXTRA_INSTALL: Uses += operator for addition
  • IMAGE_INSTALL:append: Uses :append override syntax with = operator

When to Use Each

Use CORE_IMAGE_EXTRA_INSTALL when:

  • Adding packages to core/base images
  • Working with distro-level configurations
  • Adding fundamental system components

Use IMAGE_INSTALL:append when:

  • Customizing specific images(2)
  • Adding packages in local.conf for development
  • Creating custom image recipes

Recommendation for PSplash

For PSplash installation, both approaches will work, but IMAGE_INSTALL:append is more commonly used in local.conf files for development purposes, as shown in the documentation examples(2).

Your current approach using IMAGE_INSTALL:append = " psplash" is the standard method for adding packages to images in Yocto builds.

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 tried the psplash method to display the custom logo and defined in the local.conf and custom meta layer but it doesn’t display the custom logo instead of showing the default something like yocto project at the boot time why and how to correct the defined layer configuration to show my custom logo as the splash logo at boot time in the kernel console logs disabled place.

meta-custom Layer:

hari@Administrator:~/oe-core/layers$ ls
meta-arm        meta-freescale-3rdparty  meta-openembedded  meta-toradex-bsp-common  meta-toradex-nxp
meta-browser    meta-freescale-distro    meta-qt5           meta-toradex-chromium    meta-toradex-ti
meta-custom     meta-imx                 meta-security      meta-toradex-demos       meta-yocto
meta-freescale  meta-lokbest             meta-ti            meta-toradex-distro      openembedded-core
hari@Administrator:~/oe-core/layers$ cd meta-custom/
hari@Administrator:~/oe-core/layers/meta-custom$ ls
COPYING.MIT  README  conf  recipes-core
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/psplash/psplash_git.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += "file://lokbest_logo.png"

do_install:append() {
    install -d ${D}${datadir}/psplash/
    install -m 0644 ${WORKDIR}/lokbest_logo.png ${D}${datadir}/psplash/psplash-img.png
}
hari@Administrator:~/oe-core/layers/meta-custom$ cat recipes-core/psplash/files/lokbest_logo.png
COPYING.MIT   README        conf/         recipes-core/
hari@Administrator:~/oe-core/layers/meta-custom$ file recipes-core/psplash/files/lokbest_logo.png
recipes-core/psplash/files/lokbest_logo.png: PNG image data, 887 x 267, 8-bit/color RGBA, non-interlaced
hari@Administrator:~/oe-core/layers/meta-custom

local.conf File:

# Production Runtime Tools
IMAGE_INSTALL:append = " zip tree parted smartmontools dnsmasq"
# Disable Demo Media
IMAGE_INSTALL:remove = "media-files"
# Enable required features
DISTRO_FEATURES:append = " cellular ppp"
# Add PSplash Support
IMAGE_INSTALL:append = " 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"

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"

Now correct the configuration defined in the required files to display my custom logo at the boot time in the kernel space,

Device after boot the kernel cmds configs are,

root@verdin-imx8mp-15722244:~# cat /proc/cmdline
root=PARTUUID=4e196c84-02 ro rootwait console=tty1 console=ttymxc2,115200 quiet loglevel=0 vt.global_cursor_default=0 vt.default_redraw=0
root@verdin-imx8mp-15722244:~#

Which are the bitbake commands to clean and clear before the psplash required file updates for the build?

PSplash Custom Logo Configuration Issues

Based on the official Toradex documentation, there are several issues with your current PSplash configuration that prevent your custom logo from displaying.

1. Incorrect Image Installation Path

Your current bbappend installs the logo to the wrong location. PSplash expects the image to be embedded during compilation, not installed as a runtime file. The correct approach requires modifying the PSplash source during the build process(1).

2. Correct PSplash bbappend Configuration

Update your psplash_git.bbappend file following the Toradex documentation pattern(1):

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

SRC_URI += “file://lokbest_logo.png”

Convert and replace the default logo during compilation

do_configure:prepend() {
# Convert PNG to header file that PSplash can use
if [ -f “${WORKDIR}/lokbest_logo.png” ]; then
# Create the psplash logo header from your custom image
cd ${S}
./make-image-header.sh ${WORKDIR}/lokbest_logo.png POKY
fi
}

(1)

3. Image Format Requirements

Your PNG image may need specific formatting. Based on the documentation for image conversion(2), convert your image to the proper format:

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

(2)

4. Alternative Approach Using Plymouth

Given the complexity of PSplash logo replacement, consider using Plymouth instead, which is better documented. Following the official Toradex documentation(3):

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
}

(3)

5. Bitbake Cleaning Commands

Before rebuilding with your updated configuration, clean the PSplash build artifacts(4):

# Clean PSplash specifically
$ bitbake -c clean psplash

Clean all build artifacts for PSplash

$ bitbake -c cleanall psplash

Clean the state cache

$ bitbake -c cleansstate psplash

(4)

6. Kernel Parameters Verification

Your kernel command line parameters are correctly configured for hiding boot logs:

quiet loglevel=0 vt.global_cursor_default=0 vt.default_redraw=0

These parameters should properly suppress kernel messages during boot.

7. Recommended Build Sequence

Follow this sequence to properly rebuild with your custom logo(1):

# 1. Clean PSplash
$ bitbake -c cleanall psplash

2. Update your bbappend file with the correct configuration

3. Test PSplash build specifically

$ bitbake psplash

4. Build your complete image

$ bitbake <your-image>

(1)

8. Layer Priority Consideration

Your meta-custom layer has priority 6, which should be sufficient to override default configurations. However, ensure no other layers are conflicting by checking layer priorities with:

$ bitbake-layers show-layers

The main issue is that PSplash requires the logo to be compiled into the binary during build time, not installed as a runtime file. The corrected bbappend should handle the logo conversion and integration during the compilation 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.


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’m using the psplash because of the plymouth has some dependency error like drm, dracut, dango. so im using the psplash. so I can’t understand the before conversation for the bbappend file for the psplash as psplash_git.bbappend and image format give me the correct solution bbappend file and image format for the pspash layer.

Issue happened bbappend file and image format is here

hari@Administrator:~/oe-core/layers/meta-custom/recipes-core/psplash$ cat psplash_git.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += "file://lokbest_logo.png"

do_install:append() {
    install -d ${D}${datadir}/psplash/
    install -m 0644 ${WORKDIR}/lokbest_logo.png ${D}${datadir}/psplash/psplash-img.png
}
hari@Administrator:~/oe-core/layers/meta-custom/recipes-core/psplash$
hari@Administrator:~/oe-core/layers/meta-custom/recipes-core/psplash$ file files/lokbest_logo.png
files/lokbest_logo.png: PNG image data, 887 x 267, 8-bit/color RGBA, non-interlaced
hari@Administrator:~/oe-core/layers/meta-custom/recipes-core/psplash$

Give me the correct format for the pslash bbappend and png file format for the psplash at the kernel space custom logo as splash screen at start time.

Correct PSplash Configuration for Custom Logo

Based on the official Toradex documentation, I can provide you with the correct PSplash configuration for displaying your custom logo.

1. Correct Image Format

Your PNG image needs to be converted to a BMP format that PSplash can handle(1). Convert your image using this command:

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

(1)

2. Correct PSplash bbappend File

Here’s the corrected psplash_git.bbappend file following the Toradex documentation pattern(2):

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

SRC_URI += "file://lokbest_logo.bmp"

# Replace the default PSplash image during compilation
do_configure:append() {
    if [ -f "${WORKDIR}/lokbest_logo.bmp" ]; then
        # Copy the custom logo to replace the default PSplash logo
        cp ${WORKDIR}/lokbest_logo.bmp ${S}/base_images/psplash-poky-img.h
    fi
}

(2)

3. Alternative Approach - Replace Source Image

If the above doesn’t work, try this alternative approach that directly replaces the PSplash source image(2):

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

SRC_URI += "file://lokbest_logo.bmp"

do_configure:prepend() {
    # Convert BMP to header file that PSplash expects
    if [ -f "${WORKDIR}/lokbest_logo.bmp" ]; then
        cd ${S}
        # Use PSplash's own conversion tool
        ./make-image-header.sh ${WORKDIR}/lokbest_logo.bmp POKY > psplash-poky-img.h
    fi
}

(2)

4. Image Size Recommendations

Based on the documentation for splash screens(1), ensure your image:

  • Is a reasonable size for your display
  • Uses 8-bit color depth
  • Is in BMP3 format after conversion

5. File Structure

Your file structure should be:

meta-custom/recipes-core/psplash/
├── files/
│   └── lokbest_logo.bmp  (converted from PNG)
└── psplash_git.bbappend

6. Clean Build Process

After updating your configuration, clean and rebuild(2):

# Clean PSplash specifically
bitbake -c cleanall psplash

# Rebuild PSplash
bitbake psplash

# Build your complete image
bitbake <your-image>

(2)

7. Key Points

  • Use BMP format: PSplash expects BMP images, not PNG(1)
  • Replace during compilation: The logo must be embedded during build time, not installed at runtime
  • Proper conversion: Use the exact conversion parameters shown above(1)

The main issue with your current configuration is that you’re trying to install a PNG file at runtime, but PSplash needs a BMP file compiled into the binary during build time.

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 facing the error issue for the psplash bbappend file,

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

SRC_URI += "file://lokbest_logo.bmp"

do_configure:append() {
     if [ -f "${WORKDIR}/lokbest_logo.bmp" ]; then
         cp ${WORKDIR}/lokbest_logo.bmp ${S}/base_images/psplash-poky-img.h
     fi
}

| checking for stdio.h... (cached) yes
| checking for stdlib.h... (cached) yes
| checking for string.h... (cached) yes
| checking for inttypes.h... (cached) yes
| checking for stdint.h... (cached) yes
| checking for strings.h... (cached) yes
| checking for sys/stat.h... (cached) yes
| checking for sys/types.h... (cached) yes
| checking for unistd.h... (cached) yes
| checking for grep that handles long lines and -e... /home/hari/oe-core/build/tmp/hosttools/grep
| checking for egrep... /home/hari/oe-core/build/tmp/hosttools/grep -E
| checking for aarch64-tdx-linux-pkg-config... no
| checking for pkg-config... /home/hari/oe-core/build/tmp/work/armv8a-tdx-linux/psplash/0.1+git/recipe-sysroot-native/usr/bin/pkg-config
| configure: WARNING: using cross tools not prefixed with host triplet
| checking pkg-config is at least version 0.9.0... yes
| checking for libsystemd >= 221... yes
| configure: creating ./config.status
| config.status: creating Makefile
| config.status: creating config.h
| config.status: executing depfiles commands
| configure: WARNING: unrecognized options: --with-libtool-sysroot, --disable-static
| cp: cannot create regular file '/home/hari/oe-core/build/tmp/work/armv8a-tdx-linux/psplash/0.1+git/git/base_images/psplash-poky-img.h': No such file or directory
| WARNING: exit code 1 from a shell command.
ERROR: Task (/home/hari/oe-core/build/../layers/openembedded-core/meta/recipes-core/psplash/psplash_git.bb:do_configure) failed with exit code '1'
NOTE: Tasks Summary: Attempted 12699 tasks of which 12684 didn't need to be rerun and 1 failed.
NOTE: Writing buildhistory
NOTE: Writing buildhistory took: 4 seconds

Summary: 1 task failed:
  /home/hari/oe-core/build/../layers/openembedded-core/meta/recipes-core/psplash/psplash_git.bb:do_configure
    log: /home/hari/oe-core/build/tmp/work/armv8a-tdx-linux/psplash/0.1+git/temp/log.do_configure.5579
Summary: There were 12 WARNING messages.
Summary: There was 1 ERROR message, returning a non-zero exit code
hari@Administrator:~/oe-core/layers/meta-custom$ cat recipes-core/psplash/psplash_git.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

SRC_URI += "file://lokbest_logo.bmp"

do_configure:prepend() {
    if [ -f "${WORKDIR}/lokbest_logo.bmp" ]; then
        cd ${S}
        ./make-image-header.sh ${WORKDIR}/lokbest_logo.bmp POKY > psplash-poky-img.h
    fi
}
| DEBUG: Python function extend_recipe_sysroot finished
| DEBUG: Executing shell function autotools_preconfigure
| DEBUG: Shell function autotools_preconfigure finished
| DEBUG: Executing python function autotools_aclocals
| DEBUG: SITE files ['endian-little', 'bit-64', 'arm-common', 'arm-64', 'common-linux', 'common-glibc', 'aarch64-linux', 'common']
| DEBUG: Python function autotools_aclocals finished
| DEBUG: Executing shell function do_configure
| failed to load "/home/hari/oe-core/build/tmp/work/armv8a-tdx-linux/psplash/0.1+git/lokbest_logo.bmp": Couldn’t recognize the image file format for file “/home/hari/oe-core/build/tmp/work/armv8a-tdx-linux/psplash/0.1+git/lokbest_logo.bmp”
| WARNING: exit code 1 from a shell command.
ERROR: Task (/home/hari/oe-core/build/../layers/openembedded-core/meta/recipes-core/psplash/psplash_git.bb:do_configure) failed with exit code '1'
NOTE: Tasks Summary: Attempted 12699 tasks of which 12684 didn't need to be rerun and 1 failed.
NOTE: Writing buildhistory
NOTE: Writing buildhistory took: 4 seconds

Summary: 1 task failed:
  /home/hari/oe-core/build/../layers/openembedded-core/meta/recipes-core/psplash/psplash_git.bb:do_configure
    log: /home/hari/oe-core/build/tmp/work/armv8a-tdx-linux/psplash/0.1+git/temp/log.do_configure.9474
Summary: There were 12 WARNING messages.
Summary: There was 1 ERROR message, returning a non-zero exit code.
hari@Administrator:~/oe-core/build$

Give me the correct bbappend file configuration for the custom logo splash screen using the psplash at the kernel level?

Correct PSplash bbappend Configuration

Based on the official Toradex documentation for custom splash screens, I can provide you with the correct PSplash configuration that addresses the errors you’re encountering.

1. Issue Analysis

The errors show two main problems:

  • The directory base_images/psplash-poky-img.h doesn’t exist
  • The image format is not being recognized by the conversion tool

2. Correct Image Conversion

First, convert your PNG to the proper BMP format using the exact parameters from the documentation(1):

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

(1)

3. Corrected PSplash bbappend File

Based on the Toradex documentation structure(1), here’s the correct psplash_git.bbappend:

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

SRC_URI += "file://lokbest_logo.bmp"

# Create the directory structure and convert image during configure
do_configure:prepend() {
    # Ensure the base_images directory exists
    mkdir -p ${S}/base_images
    
    # Convert the BMP to header file if the conversion tool exists
    if [ -f "${WORKDIR}/lokbest_logo.bmp" ] && [ -f "${S}/make-image-header.sh" ]; then
        cd ${S}
        chmod +x ./make-image-header.sh
        ./make-image-header.sh ${WORKDIR}/lokbest_logo.bmp POKY > ${S}/psplash-poky-img.h
    fi
}

(1)

4. Alternative Approach - Direct Header Replacement

If the conversion tool approach continues to fail, try this simpler approach:

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

SRC_URI += "file://psplash-poky-img.h"

do_configure:prepend() {
    # Replace the default header file with custom one
    if [ -f "${WORKDIR}/psplash-poky-img.h" ]; then
        cp ${WORKDIR}/psplash-poky-img.h ${S}/
    fi
}

(1)

For this approach, you would need to:

  1. Build PSplash once without modifications
  2. Extract the generated psplash-poky-img.h from the build directory
  3. Manually edit it to include your logo data
  4. Place the modified header file in your files/ directory

5. Plymouth Alternative Recommendation

Given the complexity you’re experiencing with PSplash, consider using Plymouth instead, which has better documentation support(1). The Plymouth approach from the official documentation shows:

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)

6. Build Commands

After updating your configuration:

# Clean PSplash completely
bitbake -c cleanall psplash

# Test the PSplash build
bitbake psplash

# Build your image
bitbake <your-image>

(1)

The main issue is that PSplash’s image conversion process is more complex than simple file copying. The corrected bbappend addresses the directory creation and proper conversion workflow.

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.