Skip to content

plymouth: add boot splash for KMS devices - #162

Closed
dangowrt wants to merge 2 commits into
openwrt:masterfrom
dangowrt:plymouth
Closed

dangowrt wants to merge 2 commits into
openwrt:masterfrom
dangowrt:plymouth

Conversation

@dangowrt

Copy link
Copy Markdown
Member

Plymouth draws a boot splash straight onto a DRM device and holds the display until whatever follows it takes over, so nothing of the boot is visible between reset and the user interface. On a board with no framebuffer console that is the only way to put anything on screen early. Packaged here with an OpenWrt theme drawn by the script splash plugin, which ships with plymouth itself and needs no extra dependency.

Built without the framebuffer backend, without systemd and upstart integration, and without gtk, pango and freetype, so the runtime needs only libpng and libdrm. Tracing is compiled in only for a debug build.

Three patches are carried. Two are build fixes for musl, which has neither rpmatch() nor execinfo.h. The third is a real bug: the DRM renderer drops master immediately after opening the device and takes it back only when the splash is activated, so every connector probe runs as a client that is not DRM master. The kernel declines a forced probe from such a client and returns the cached connection status instead, which on a connector nothing has probed yet is unknown. No output counts as connected, no controller is assigned, and the renderer gives up with Could not initialize heads. Plymouth could therefore light a display only after some other client had already probed it, which on a system with fbdev emulation disabled never happens. Holding master across the enumeration fixes it; verified on an rk3588 board with no other DRM client running, where the HDMI connector goes from unknown to connected at 1920x1080 and the sink wakes from low power. That patch has been submitted upstream.

The xkeyboard-config commit is a prerequisite: plymouth's meson.build does dependency('xkeyboard-config'), which cannot resolve unless the package stages its pkg-config file.

Build tested for rockchip/armv8 (aarch64, musl) and run tested on a Radxa ROCK 5B.

The package builds xkeyboard-config-2.pc and a compatibility symlink
to it, but installs neither into the staging directory, so anything
asking pkg-config for xkeyboard-config fails to configure. plymouth
does, for the xkb_base path.

Install both names; the symlink alone leaves a dangling link.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Plymouth draws a boot splash straight onto a DRM device and owns the
display until whatever follows it takes over, so the console stays
silent from reset onwards. Package it with an OpenWrt theme drawn by
the script splash plugin.

It is built without the framebuffer backend, without systemd and
upstart integration, and without gtk, pango and freetype, so the splash
needs only libpng and libdrm at runtime. Two local patches let it build
against musl, which has neither rpmatch() nor execinfo.h. A third
holds DRM master across the connector probe, without which the kernel
returns the cached connection status and plymouth can light a display
only after some other client has probed it.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
@openwrt openwrt Bot added the add package Introduces a new package Makefile build script label Sep 25, 2026
@dangowrt dangowrt closed this Sep 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

add package Introduces a new package Makefile build script

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant