Kernel splash screen not showing in BSP 5.2.0

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

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”):

    	mxcfb_blank(0,fbi);
	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.

Merlin

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

hi @henrique.tx ,
OMG it works :star_struck:

The image is 29 pixel smaller as told in the GUI but it works.

Thank you very much. Finally my problem is solved.

I’m looking for a solution about images size (if it exists)

I hope this solution will work also for @jars121

Merlin

1 Like

Hi @henrique.tx ,
I applied a patch my ex-collegue Enrico realized with BPS 4.0.
The patch is the following:

diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index 75b7705140673..53648c68466dd 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -582,6 +582,8 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
 	unsigned short *save = NULL, *r, *q;
 	int logo_height;
 
+	vc->vc_bottom = 68;
+
 	if (info->fbops->owner) {
 		logo_shown = FBCON_LOGO_DONTSHOW;
 		return;
--

It allows me to use a 1920x1080 splash image.

Thanks all for your support.
I will indicate the solution also under my opened thread .

Hi @Merlin !

Great!

We will review our documentation about splash screen to try to improve it by discussing this overlay interaction behavior.

Best regards,

1 Like

Hi @henrique.tx !
Your documentation is always great, I think it will be enough a little edit :wink:

Regarding the 29 pixel issue instead, I don’t know if my system is now at risk of explosion XD, but it might be a good idea to also talk about changing the vc->vc_bottom parameter. A full screen image is definitely better than one with cropped edges.
Surely there is a better way to accomplish that done by our patch.
But look ad the attached image: fullscreen splash image :heart_eyes:

Thanks for precious support.

2 Likes

Great to see that you got it working @Merlin !

Unfortunately I’m still unable to get it working. I’ve now done a number of clean builds using the latest BSP (i.e. repo init -u http://git.toradex.com/toradex-manifest.git -b dunfell-5.x.y -m tdxref/default.xml), and have modified the fbcon.c file per Merlin’s patch. In my case I used a vc->vc_bottom value of 30, as my display is 800x480, and a value of 30 should prevent the ‘image is too large’ issue associated with the fbcon implementation.

I don’t have a /boot/overlays.txt file, and in reading this article, I’m finding some potential anomalies with my installation. The linked article states that for BSP versions 5.0 and later, I should have a number of *.dtbo files in the /boot/overlays directory. My installation doesn’t have a /boot/overlays directory; my /boot directory contains the following:

Image.gz
Image.gz-5.4.161-5.6.0-devel+git.0f0011824921
imx8qm-apalis-eval.dtb
imx8qm-apalis-ixora-v1.1.dtb
imx8qm-apalis-v1.1-eval.dtb
imx8qm-apalis-v1.1-ixora-v1.1.dtb
imx8qm-apalis-v1.1-ixora-v1.2.dtb
imx8qp-apalis-v1.1-eval.dtb
imx8qp-apalis-v1.1-ixora-v1.1.dtb
imx8qp-apalis-v1.1-ixora-v1.2.dtb

This may not be linked in any way to the splash screen issue I’m having, but I do find it strange that my installation does not align with the published article nor with Merlin’s.

One final note on overlays, my u-boot reports the following during boot:

Applying Overlay: apalis-imx8_hdmi_overlay.dtbo

This appears to be the HDMI overlay which @henrique.tx asked Merlin to remove from his /boot/overlays.txt file. Given that this is in u-boot I’m not sure whether it’s relevant, but figured I’d point it out just in case.