0

I'm currently working with an STM32MP octavo board, specifically the OSD32MP1-BRK model, which is running an embedded Linux kernel version 5.4.31. As part of my project, I'm attempting to display a bootup logo on the device's screen. Currently, when the device boots up, the screen remains blank for approximately 25 seconds until my Qt application starts running through rc-local.service. However, instead of the blank screen during this time, I would like to display a bootup logo. I am using a custom LCD with the driver "FB driver for the ST7789V LCD Controller"

To achieve this, I have gone through the process of compiling the desired logo using the 'menuconfig' tool. I have made the necessary configuration changes in the Linux kernel to enable the display of a boot logo. However, despite these modifications, the logo is not being displayed during the boot process. I have verified that the logo file is present in the system and properly configured, but it doesn't appear on the screen as expected.

Things I've tried so far:

  • I have enabled the following drivers in "Device Drivers -----> Graphics Support"
    1. Frame Buffer Support
    2. Console display driver support ---> Framebuffer Console support
  • I have passed some framebuffer parameters to the kernel command line such as "splash" "framebuffer_depth" but the splash screen seems to do nothing.
  • I have also tried to show splash screen through initramfs in bootloader condfiguration but initramfs doesn't gets load i have checked it by passing "echo" but there's no such log.

At last, by using "dmesg" I found that Psplash Boot screen was loading and here's the log

  • [4.985883] systemd[1]: Started Starts Psplash Boot screen.

but it is loading before framebuffer so i made framebuffer rules in /etc/udev/rules.d to load framebuffer before psplash service, but it also doesn't work.

So, Is there any way I can achieve the desired result and display some logo on the screen during boot process?

1 Answers1

0

I had exactly the same problem with same kernel version (5.4.193) and the same display: Sitronix st7789v (attached to Toradex imx7d emmc 1gb SOM).

Unfortunately the splash logo does not show: the driver initializes the display late in the boot process (after the rootfs mount) and the display shows only some of the boot logs.

After some analysis, this display initialization delay is due to the fact that SDMA peripheral is initialized late in the boot process because its driver is compiled as module.

If the SDMA driver was compiled builtin, it would initialize the SDMA peripheral early in the boot stage, allowing the SPI contoller (and hence the display) configured immediately and not deferred.

Unfortunately, the SDMA peripheral needs a binary firmware loaded from the outside to work properly. The binary firmware is in the rootfs (under /lib/firmware/imx/sdma/sdma-imx7d.bin), but rootfs is not available in the early boot stages. In that situation, the SDMA initializazion would be deferred again after the rootfs mount.

Two different solutions has been found to have the display initialized early in the boot and showing the Linux logo:

  • disable the DMA for the SPI controller driver: the SPI controller does not wait the DMA anymore and initializes the display early. As a consequence of the DMA disabled, the display performances could be poor and system could have the CPU load increased.

  • build the SDMA driver as builtin and bundle the SDMA firmware in the Linux zImage: the SDMA gets ready in earlier boot stage because the firmware is attached to zImage and then loaded from memory (no more need to access the rootfs), then the SPI controller can initialize itself (and the attached display) early in the boot sequence.

Note that this solution could produce license issues because a non-GPL binary (the firmware) is bundled with a GPL binary (the kernel)

The Linux logo is shown early in the boot process with each of the two above solutions.

LinFelix
  • 1,026
  • 1
  • 13
  • 23
Val
  • 1
  • 2