You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Yocto中实现开机画面持续显示至用户空间加载完成

Yocto环境下全程显示同一开机logo的实现方案

黑屏间隙的本质是内核加载完成后清空帧缓冲、控制台输出/清屏操作、用户空间开机动画启动过晚三者共同导致的,按照以下步骤配置即可实现全程无黑屏显示同一logo:

1. 内核侧配置

  • 启用帧缓冲核心配置:确保内核配置中CONFIG_FB、CONFIG_FRAMEBUFFER_CONSOLE处于开启状态,关闭CONFIG_FB_VESA等不需要的帧缓冲驱动,仅保留你的硬件对应的显示驱动。
  • 在内核启动参数中追加以下配置,禁止控制台清屏和光标渲染:
    vt.global_cursor_default=0 consoleblank=0 quiet splash
    
  • 将你的自定义logo转换为PPM格式,替换内核源码drivers/video/logo/logo_linux_clut224.ppm文件,开启CONFIG_LOGO相关配置,确保内核启动阶段即可渲染你的自定义logo到帧缓冲。

2. psplash适配改造(解决清屏闪黑问题)

你之前使用psplash出现的问题是默认psplash启动时会主动清空帧缓冲,导致内核渲染的logo被清除,出现短暂黑屏:

  • 新增psplash的bbappend文件到你的自定义Yocto层,修改源码注释掉清屏逻辑:
    FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
    SPLASH_IMAGES = "file://custom-logo.png;outsuffix=default"
    SRC_URI += "file://0001-remove-fb_clear-on-startup.patch"
    
    其中补丁文件0001-remove-fb_clear-on-startup.patch的作用是注释掉psplash.c中启动时调用fb_clear()的代码行,让psplash启动时直接复用内核已经渲染好的帧缓冲内容,不需要重新绘制也不会清屏。
  • 调整psplash的启动优先级:将psplash的systemd服务或者sysvinit启动脚本的优先级调整到用户空间服务的最前列,确保内核移交控制权后第一时间启动psplash,无空窗期。

3. 关闭其他可能触发清屏的环节

  • 如果你使用systemd作为init系统,在内核启动参数追加systemd.show_status=false systemd.log_level=err,禁止systemd启动过程输出日志到控制台覆盖logo。
  • 修改getty服务配置,在getty@.service的ExecStart参数中添加--noclear,避免tty初始化时清屏,示例:
    ExecStart=-/sbin/agetty --noclear %I $TERM
    

4. 退出时机配置

等你的用户空间主应用完全初始化完成、即将渲染自身UI前,调用psplash-quit命令退出psplash即可,全程logo会持续显示直到你的应用界面加载完成,无黑屏间隙。

内容的提问来源于stack exchange,提问作者Progga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:09:05