Kernel splash screen not showing in BSP 5.2.0

Hi,

I have followed this article several times over the last couple of years to configure custom splash screens for various iMX6-based devices on previous Toradex BSPs. I’m now trying to do the same, using both my previous build notes and the article, but am unable to get the custom splash working on an iMX8QM under BSP 5.2.0. This community post seemed to have a similar issue, but I do not receive any logo-based dmesg errors.

The article has added the following statement (since I last read the article), which isn’t expanded upon, and seems to go against the rest of the article’s example. I.e. the article example creates a 1024x600 pixel splash screen for a 1024x600 display; the splash screen image isn’t “29 pixels smaller than the resolution of the display”.

The above ‘Attention’ doesn’t specify for which BSP/kernel this relates, nor whether the 29 pixels pertains to the width or height (or both) of the image. Just to be sure, I rebuilt my custom splash screen image with both the width and height being 29 pixels less than the display resolution, but the splash screen was still not displayed. I note that my previous iMX6-based builds used a splash screen image that was exactly the same resolution as the display (which makes sense) and displayed without issue. Can you please clarify this ‘Attention’ further.

As for the remainder of the process, I include the logo_custom_clut224.ppm image in my custom Yocto layer and add it to the SRC_URI in my kernel .bbappend, I’ve selected the custom logo option in the kernel configuration and verified the selection in the resulting defconfig file (which I have confirmed is being correctly used in the build process).

When booting the device, the backlight is turned on, but with no splash screen, until the login prompt is shown. I have disabled the console output, as well as the blinking cursor, and have also tried the ‘quiet’ option. I have added ‘PREFERRED_PROVIDER_psplash-support = “psplash-angstrom”’, as I had the written in my previous build notes, but I’m unsure if that’s still required.

Lastly, I tried adding psplash to the image install directly, and in doing so was able to see the generic psplash splash screen with loading bar. I haven’t yet replaced the standard psplash file with my own as there is no mention in any Toradex literature of needing to do so. As far as I’m aware, I shouldn’t need to manually add/use psplash.

Any clarification would be greatly appreciated.

Hello @jars121 ,

Thank you for your post here! The reason for the attention has something to do with the Kernel sources (mainline) itself and reducing the pixel height by 29 pixels is a “workaround” to get the display working for now.

And the 'PREFERRED_PROVIDER_psplash-support = "psplash-angstrom", this is an error here because the Angstrom images from the Toradex are deprecated now and no more supported.

And here is another community ticket for splash screen: https://www.toradex.com/community/questions/46861/splash-screen-on-apalis-imx8qm.html?childToView=47106#comment-47106. Though it was for BSP 3.0, the method would be the same. Could you please try this?

Best Regards,
Janani

Hi @saijanani.tx

Thanks again for your support! I’ve removed the psplash-support line, thanks for clarifying that.

As per my post, I had gone through the other community ticket in detail, but my issue doesn’t seem to fully align with the issue raised in that post. I don’t receive the same dmesg error pointing to the fbcon.c file. The U-Boot and kernel text displays correctly, so a framebuffer driver is being used.

Would it be possible for you to try building a Yocto image with custom splash (with U-Boot and kernel text/console disabled) on an Apalis iMX8QM and report back?

Hello @jars121 ,

Yes, we will try to reproduce this at our side.

Best regards,
Janani

Brilliant, thanks @saijanani.tx that would be greatly appreciated.

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,
Jaski

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
     SAVEDIR:="${THISDIR}/linux-toradex-5.4-2.3.x"
     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,
John

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:
    SAVEDIR:="${THISDIR}/u-boot-toradex_2020.04"
    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:

#ifdef CONFIG_DM_VIDEO
#define CONFIG_VIDEO_LOGO
#define CONFIG_SPLASH_SCREEN
#define CONFIG_SPLASH_SCREEN_ALIGN
#define CONFIG_CMD_BMP
#define CONFIG_BMP_16BPP
#define CONFIG_BMP_24BPP
#define CONFIG_BMP_32BPP
#define CONFIG_VIDEO_BMP_RLE8
#define CONFIG_VIDEO_BMP_LOGO
#endif

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,
John

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.

John

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