I have the BSP 6.4.0 multimedia reference image bitbaken adding plymouth as for Toradex tutorial.
But when booting target the text boot messages comes on the HDMI output.
The plymouth set splash image goes onscreen for few seconds, then other text, then Weston is launched with a desktop background and a upper bar. I’ve managed to auto-start my QT app on Weston.
During boot process I want on HDMI, as Torizon does, the plymouth splash image only (with spinner rotating), then my QT5 app launched, without backgrounds and/or bars. As a kiosk.
I made some experiments with fw_setenv and editing the /etc/xdg/weston/weston.ini with no success.
in /etc/xdg/weston/weston.ini. Now no background and not upper bar. OK what I wanted.
Regarding boot messages:
fw_setenv setupargs “fbcon=map:1 quiet”
makes HDMI boot output having some blank screen and, as before, the plymouth splash image only for few moments. Suggestions?
Let me see if I understood your question: You don’t want any text from the boot process to appear on the HDMI screen, only the plymouth splash screen with the rotating spinner icon before loading Weston with your application. The splash screen should be visible for a few moments i.e. not disappear too quickly. Is this correct?
To get rid of the text output during boot you can append the quiet kernel parameter. To do this in our BSP reference images we recommend using the U-Boot variable tdxargs, as mentioned here: U-Boot | Toradex Developer Center. Once logged in as root, run the following command:
fw_setenv tdxargs "quiet"
After reboot you shouldn’t see any verbose output.
To make the splash screen visible for a longer period of time, you can create a systemd service that adds a small delay during the animation.
Create a file called plymouth-wait-for-animation.service in /etc/systemd/system/:
[Unit]
Description=Waits for Plymouth animation to finish
Before=plymouth-quit.service
[Service]
Type=oneshot
ExecStart=/bin/sleep TIME
[Install]
WantedBy=plymouth-start.service
Where TIME is the delay you want in seconds e.g. for 5 seconds the line will be:
Then I made some tweaking on u-boot variables to see what happens and the only setting (I’ve tested a lot of) that makes disappear all from HDMI is to redirect the framebuffer console with the u-boot command:
setenv setup “${setup} fbcon=map:1”
The resulting boot process is nearly what I want but first few seconds are with blank screen and the tft backlight is first on, then off, then on again, then the plymouth splash goes onscreen, then blank screen and again backlight on and off for two times, finally the QT app starts.
Ok, I can accept this but what I see on Torizon OS boot process is the plymouth splash image onscreen almost immediately, then a short time blank screen, then the user program start.
I wonder if it is possible to replicate the same result…
We delay plymouth-quit.service by quite a lot in TorizonCore to eliminate those “in-between” states.
I suggest you run systemd-analyze plot > chain.svg and patch Plymouth in a similar fashion as we do for TorizonCore[0].
said in advance that I’m new to Yocto and that I’m doing now some first steps into (and I found it’s a very powerful and interesting instrument),
I have two questions:
I prefer your solution to patch the plymouth recipe so to wait for the some service to start before to quit the plymouth one. I’ve bitbaken the BSP adding the Torizon patch to plymouth replacing the row:
After=rc-local.service plymouth-start.service systemd-user-sessions.service docker.service
with:
After=rc-local.service plymouth-start.service systemd-user-sessions.service weston.service
The result is that the splash screen never exit. I suppose I have to put the wayland service instead?
I’ve read (Plymouth - ArchWiki) that, to start plymouth very early at boot, I have to configure the initramfs. Is that already done by the Yocto recipe or I have to tweak something?
I’m struggling without success trying to setup plymouth on the BSP.
I’ve followed your suggestions and from: ‘systemd-analyze plot > chain.svg’ I see that plymouth-quit.service is called before the gettys and user graphical stuff, as expected.
If I set something like weston.service or (better for me) wayland-app-launch.service as a After dependency into plymouth-quit.service eg:
the plymouth never quits and if I issue ‘systemctl list-jobs’ I see the waiting jobs:
I argue there is a dependency on the waiting jobs about plymouth to be closed?
Please help me to reproduce what you do in Torizon waiting for the docker.service.
My boss is telling me there is no more time for the splash-screen job and I’m near and want to acheive it.
Thanks
Pietro
Hello again,
after writing the previous post I edited all service files that were waiting and deleted the plymouth-quit-wait.service After dependency on each one. Effectively on serial@.service and on weston.service.
Then inserted into plymouth-quit.service After dependencies the wayland-app-launch.service and… …now the boot process quits from plymouth right before to start my Qt App. GOOD!
That’s enough for my boss. But… …I see (systemd-analyze plot > chain.svg) that the kernel takes about 3 seconds to load and I know that it’s possible to start plymouth before, configuring the initramfs. How-to?