Kernel splash screen not showing in BSP 5.2.0

Hi @saijanani.tx

Just checking whether you’ve had any luck with building a Yocto image with custom splash on the iMX8QM? Thanks!

hi @jars121

Sorry for the late reply, I will check this issue and answer you within one day.

Thanks and best regards,

Thanks @jaski.tx that would be greatly appreciated :slight_smile:

Hi @jars121

Sorry for the long delay.

I could make the splash screen appear by following the article Splash Screen on the Linux Kernel and, for the Disabling the Framebuffer Console section, I defined setupargs like the following:

Apalis iMX8 # setenv setupargs "vt.global_cursor_default=0 consoleblank=0 console=ttyLP1 earlycon"

Best regards.

Hi @henrique.tx

Sorry to continue with this topic, but I’ve probably done 20+ clean builds since your comment, and despite trying a range of different configurations, I’m still unable to get the kernel splash screen to show. I’ve followed the ‘Splash Screen on the Linux Kernel’ article each time, and have tried a range of different setupargs in the u-boot console. I’ve also tried enabling the default Linux kernel logo (rather than my custom image), but even that isn’t displayed.

I’m also not seeing any issues/errors in dmesg (I’m not seeing the fbcon issue regarding the logo being too big for example). Is there anything else I can check? Have you been able to get the kernel splash to display on Rev 1.1B silicon with an LVDS display? Could HAR-4399 possibly be the cause? Other than the kernel splash not displaying, the operation of the LVDS display works perfectly.

Hi @jars121,

I am working with Colibri iMX8X so my implementation may vary a little from Apalis iMX8 setup, but all general steps should be the same. Also, I am working with RGB display. It seems to me that you are doing everything correctly. Unfortunately, details matter. Steps below work well with BSP 5.4.0 and 5.5.0` Linux kernel is 5.4-2.3.3.

  • A kernel fragment (.cfg) to set CONFIG_LOGO_CUSTOM_CLUT224=y was created.
  • Fragment used in custom layer in recipes-kernel/linux/linux-toradex_5.4-2.3.x.bbappend like this
     SRC_URI += "\
         file://Custom-logo.cfg \
         file://logo_custom_clut224.ppm \
  • My RGB display is small (640x480), so the .ppm file has resolution 600x450
  • The .ppm file is installed in linux-toradex_5.4-2.3.x.bbappend like this
     addtask do_after_unpack after do_unpack before do_configure
     do_after_unpack() {
      cp "${SAVEDIR}/logo_custom_clut224.ppm" "${WORKDIR}/git/drivers/video/logo/logo_custom_clut224.ppm"
  • U-boot configuration in include/configs/colibri-imx8x.h was updated:
--- a/include/configs/colibri-imx8x.h
+++ b/include/configs/colibri-imx8x.h
@@ -93,6 +93,7 @@
 	"finduuid=part uuid mmc ${mmcdev}:2 uuid\0" \
 	"image=Image\0" \
 	"initrd_addr=0x83800000\0" \
+	"setupargs=vt.global_cursor_default=0 consoleblank=0 console=ttyLP3,115200\0" \
 	"mmcargs=setenv bootargs console=${console},${baudrate} " \
 		"root=PARTUUID=${uuid} rootwait " \
 	"mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \

Make sure that ‘console’ has correct parameters. Yours may be different.

To be clear, I started working on the kernel logo implementation when I was sure my custom DTS file enables my custom display and the default console output together with default Tux logos can be seen. The variable setupargs blocks the console output on the display completely. Then, replacing the logo with your image should be enough.

Best regards,

Thank you John1
your solution with “setupargs” is better than my current solution “console=null” :wink: THX

I have an additional question
You thought about displaying the splash screen before Kernel start ?
Have you fought with it?
The user has to wait an awful long time for the splash screen
I can’t sleep.

Hi @MariusM,

yes, I have been messing with the u-boot splash screen (logo). Unfortunately, I have not been able to make it work.

  • I have enabled CONFIG_DM_VIDEO (requested for BSP 5.0+) as suggested in documentation.
  • I have also enabled CONFIG_CMD_BMP to support .bmp files, because I am providing the splash screen as a .bmp file. And all logos in tools folder are also .bmp pictures.
  • The custom .bmp file is loaded like this:
    addtask do_after_unpack after do_unpack before do_patch
    do_after_unpack () {
       cp -rf "${SAVEDIR}/toradex.bmp" "${WORKDIR}/git/tools/logos/toradex.bmp"
  • I have updated include/configs/colibri-imx8x.h with this:
    --- a/include/configs/colibri-imx8x.h
    +++ b/include/configs/colibri-imx8x.h
    @@ -93,6 +93,7 @@
    @@ -94,6 +94,7 @@
     "finduuid=part uuid mmc ${mmcdev}:2 uuid\0" \
     "image=Image\0" \
     "initrd_addr=0x83800000\0" \
    +  "splashpos=m,m\0" \
    +  "splashimage=" __stringify(CONFIG_LOADADDR) "\0" \
     "setupargs=vt.global_cursor_default=0 consoleblank=0 console=ttyLP3,115200\0" \
     "mmcargs=setenv bootargs console=${console},${baudrate} " \
     	"root=PARTUUID=${uuid} rootwait " \

When I just compile u-boot-toradex via bitbake, build folder contains bmp_logo.h file with correct information about width, height, colors and offset. I have also verified that bmp_logo_data.h contains correct data of the splash screen image.
This page describes sufficiently how to manage u-boot splash screen support. I can confirm that include/configs/colibri-imx8x.h contains necessary #define parts:

#define CONFIG_BMP_16BPP
#define CONFIG_BMP_24BPP
#define CONFIG_BMP_32BPP

According to other articles, with these macros uncommented, u-boot splash screen should show. Running command # bmp info $splashimage in u-boot console shows correct information about my custom splash screen.

I do not know what is missing or what I messed up.

Best regards,

Thank you for your answer
If I manage to fix this problem, you will get a message
Your platform is very similar to mine: imx8x+iris2.0+lvds 800x480+bsp5.6 ?

Ok. Thanks.
But honestly, u-boot loading lasts 1,5-2 seconds in my case. It should not be that bad to wait few seconds before kernel splash screen appears.


Hi @MariusM and @John1 !

About Uboot splash screen, it is not supported for iMX8 based modules:

Also, I take this opportunity to thank you both for all the help that you give here in the Community :slight_smile:

Best regards,

Hi @jars121 !

Do you still face the splash screen issue?

Best regards,

Hi @henrique.tx

Firstly, I’d like to reciprocate your appreciation for @John1 and @MariusM for their contribution to this topic, it is greatly appreciated.

I’ve not performed a clean build since my last post on this topic. However, my kernel splash image process is aligned with the process outlined by John. As mentioned in my previous post, I’m not even able to get the default Linux kernel logo to show, so (as mentioned by John) I think I need to get to the root cause of the default Linux kernel not showing before I progress with my custom splash image.

I’m waiting for a post on the forum

  • I have the toradex imx8x + iris + lvds display , I made a splash screen in U-boot, see how beautiful it is

I have a great idea

I have display 7" samples in my office (I do not need them) , I can send it to TORADEX office
(with LVDS cable) just plug into IRIS

Hi @jars121,

Your post came up in a myriad of different posts I was using to solve a similar issue. I am developing on an IMX6 system and using a framebuffer display, and I also had an issue where my framebuffer would not show the boot logo I had specified in logo_custom_clut224.ppm.

After two weeks of debugging, I finally found my solution, and I’m going to share it in hopes that it may help you too.

After booting my embedded device (with no logo showing), I looked through my dmesg to see where my LCD was being initialized. Sure enough, it was found at around 0.4s into boot:

[    0.420074] mxc_sdc_fb fb@2: registered mxc display driver lcd

The troubleshooting I performed that set me on the right track was editing my kernel’s mxc framebuffer code at drivers/video/fbdev/mxc/mxc_ipuv3_fb.c (applicable to my screen) and writing in printk messages to see where the device was “blanked” or “un-blanked”. Eventually, I found that around the same time as my device reached login in dmesg, I also found that my screen was set to “unblank” (resume) for the first time during boot.

I figured, why not try to set my screen to unblank immediately after probing rather than at login? So, at the end of the function mxcfb_probe, I placed a single statement (around line 3580, before “return 0”):

	return 0;

This immediately gave me access to the framebuffer pre-login (fbi, psplash, etc. all work now). In order to get the boot logo to work I had to re-enable framebuffer console in my configuration. Psplash works without it, though.

I hope this might help, I’m not sure if the file mxc_ipuv3_fb.c is applicable to your situation but you may be able to find out if another file will work in a similar manner.

Hi @jars121 ,
Since I’m facing the same problem you described in the thread, I would ask if finally you find a solution to this issue or not…
I’m going mad and apparently all the suggestion I received didn’t work.

Le me know, please.


Hi @Merlin

Unfortunately I haven’t been able to solve this yet. I will note that per my thread here, I’ve got other display-related issues which may or may not be related to this issue.

To be clarify, which version are your modules? Similarly, which BSP version are you using? I’m confident that we can find a solution one way or another!

Hi @jars121 !
I hope we can find a solution, my boss will kill me if I won’t find a way to show splash image XD.

About your qeustions, I’m working with:

Apalis iMX8QM V1.1B 4GB WB IT(but also V1.1C)
Carrier Board Ixora V1.2A
Yocto with BSP 5.5.

Furthermore, my Kernel version is linux-toradex_5.4-2.3.x

Hi @Merlin !

Could you check the overlays you have enabled?

cat /boot/overlays.txt

If there is the HDMI overlay, please remove it and test it again.

Best regards,

1 Like