Jetson 启动 LOGO 无黑屏切换:从 Bootloader 到 APP 首屏的显示接力机制解析

发布时间:2026/10/23 10:10:51

Jetson 启动 LOGO 无黑屏切换:从 Bootloader 到 APP 首屏的显示接力机制解析 B站 嵌入式孙老师博主个人介绍博主书籍-京东购买链接*Yocto项目实战教程加博主微信进技术交流群jerrydevJetson 启动 LOGO 无黑屏切换从 Bootloader 到 APP 首屏的显示接力机制解析前言最近在分析 Jetson Thor 的 UEFI 启动显示配置时看到两个比较关键的选项SOC Display Hand-Off Mode Always SOC Display Hand-Off simplefb / efifb这个配置看起来只是和启动 LOGO 有关但它背后对应的是一个很典型的产品启动体验问题Jetson 从 Bootloader 阶段启动到 Linux再到 APP 首屏显示如何避免中间黑屏、闪屏这篇文章结合我的理解梳理一下 Jetson 启动显示的接力过程以及simplefb、efifb、simpledrm、DRM/KMS在这个过程中分别起什么作用。1. 启动显示的核心问题很多嵌入式 Linux 设备启动时显示流程可能是这样上电 ↓ Bootloader 显示 LOGO ↓ Linux Kernel 启动 ↓ 屏幕黑一下 ↓ 图形系统启动 ↓ APP 首屏显示用户看到的现象就是LOGO 消失 屏幕黑屏 画面闪烁 APP 起来后重新显示更理想的启动体验应该是上电 ↓ Bootloader 显示 LOGO ↓ Linux early display 接住画面 ↓ DRM/KMS 正式显示驱动接管 ↓ APP 首屏自然显示也就是说显示画面不是每个阶段重新开始而是一个阶段接一个阶段完成显示接力。2. Jetson 启动显示链路Jetson 的启动链路可以简化成BootROM ↓ MB1 / MB2 ↓ UEFI ↓ Linux Kernel ↓ rootfs ↓ APP如果只看显示相关部分可以简化为UEFI LOGO ↓ simplefb / efifb / simpledrm ↓ DRM / KMS ↓ Weston / Qt / APP更直观一点┌──────────────────────────────┐ │ Bootloader / UEFI │ │ 初始化显示硬件绘制 LOGO │ └───────────────┬──────────────┘ │ │ Display Hand-Off ↓ ┌──────────────────────────────┐ │ Linux Early Display │ │ simplefb / efifb / simpledrm │ │ 继续使用已有 framebuffer │ └───────────────┬──────────────┘ │ │ DRM/KMS 接管 ↓ ┌──────────────────────────────┐ │ Linux 正式显示驱动 │ │ 建立完整显示管线 │ └───────────────┬──────────────┘ ↓ ┌──────────────────────────────┐ │ 用户空间 APP │ │ Weston / Qt / 应用首屏 │ └──────────────────────────────┘这里要注意一点Display Hand-Off 严格来说主要发生在 UEFI 到 Linux early display 阶段。从 Linux Kernel 到 APP 首屏则是 DRM/KMS 和用户空间显示服务继续完成显示接力。所以这里说的“Bootloader 到 APP 首屏”指的是完整用户可见显示链路而不是 Bootloader 直接把 framebuffer 交给 APP。3. 什么是 Display Hand-OffDisplay Hand-Off 可以理解为Bootloader 把已经初始化好的显示现场交给 LinuxLinux 早期阶段继续使用它。在 UEFI 阶段系统通常已经完成了这些工作初始化显示控制器 初始化 HDMI / DP / eDP 分配 framebuffer 绘制启动 LOGO 启动显示扫描输出如果 Linux 启动后立刻重置显示硬件就容易出现黑屏或闪屏。Display Hand-Off 的思路是UEFI 已经把屏幕点亮 Linux early boot 先不要打断它 而是继续使用 UEFI 留下来的 framebuffer它通常需要传递这些关键信息信息作用framebuffer 地址Linux 知道图像数据在哪里framebuffer 大小Linux 知道显示内存范围分辨率Linux 知道屏幕宽高stride / pitchLinux 知道每一行占多少字节pixel formatLinux 知道像素格式显示状态尽量保持当前显示不中断一句话总结Display Hand-Off 的本质就是让 Linux 接住 Bootloader 已经点亮的那一帧画面。4. 为什么不能直接让 Linux 重新初始化显示当然可以重新初始化但代价是启动显示体验变差。重新初始化显示通常涉及关闭当前显示输出 释放旧 framebuffer 重新配置 display controller 重新配置 HDMI / DP / eDP 重新申请显示 buffer 重新设置显示时序 重新点亮屏幕这个过程中容易出现黑屏 闪屏 LOGO 消失 显示器重新同步 HDMI/DP 信号重新识别对开发板调试来说这可能只是一个小现象但对产品来说这是很明显的体验问题。例如车载、机器人、工业屏、边缘 AI 终端等设备用户更希望看到上电就有画面 启动 LOGO 平滑过渡 APP 首屏自然接上 中间没有明显黑屏所以 Display Hand-Off 并不是单纯为了显示一张 LOGO而是为了让启动显示链路更连续。5. simplefb、efifb、simpledrm 的作用在 Jetson UEFI 显示交接中经常会看到几个概念simplefb efifb simpledrm它们的共同目标是在正式 DRM/KMS 显示驱动加载之前Linux 先继续显示 Bootloader 留下来的 framebuffer。可以简单对比名称信息来源作用simplefbDevice Tree通过 DT 描述 framebufferefifbUEFI GOP通过 EFI 图形信息接管 framebuffersimpledrm固件 framebuffer用 DRM 框架接管早期显示6. simplefb通过 Device Tree 交接simplefb通常依赖 Device Tree。大致流程是UEFI / Bootloader ↓ 把 framebuffer 信息写入 Device Tree ↓ Linux 解析 /chosen 下的 framebuffer 节点 ↓ simplefb 接管显示示意节点如下chosen { framebuffer { compatible simple-framebuffer; reg 0x0 0x90000000 0x0 0x00800000; width 1920; height 1080; stride 7680; format a8r8g8b8; }; };这里最关键的是地址要对 大小要对 分辨率要对 stride 要对 format 要对否则 Linux 虽然接管了 framebuffer但可能出现花屏、错位、颜色异常甚至黑屏。7. efifb通过 UEFI GOP 交接efifb更偏 UEFI 标准路径。UEFI 中有一个图形输出协议GOP: Graphics Output Protocol它的逻辑是UEFI GOP 初始化显示 ↓ UEFI 绘制 LOGO ↓ Linux 读取 EFI framebuffer 信息 ↓ efifb 继续显示所以在 UEFI 平台上efifb是比较自然的 early display 路径。8. DRM/KMS正式显示驱动接管simplefb、efifb、simpledrm只是早期显示接管它们不是最终显示方案。Linux 正式起来后还是要由 DRM/KMS 显示驱动建立完整显示管线plane crtc encoder connector mode timing framebuffer display controller完整接力关系可以理解成Bootloader framebuffer ↓ simplefb / efifb / simpledrm ↓ DRM/KMS 正式显示驱动 ↓ Weston / Qt / APP如果 DRM/KMS 接管过程不平滑即使前面的 Display Hand-Off 正常后面也可能出现短暂闪屏。所以完整的“无黑屏切换”实际包含两次关键交接UEFI → Linux early framebuffer Linux early framebuffer → DRM/KMS9. APP 首屏和 Display Hand-Off 的关系这里有一个容易误解的点Display Hand-Off ≠ Bootloader 直接交给 APPAPP 是用户空间程序它要等下面这些阶段完成后才会启动Linux Kernel 启动 rootfs 挂载 init/systemd 启动 图形服务启动 APP 启动所以更准确的链路是Bootloader LOGO ↓ Display Hand-Off ↓ Linux early framebuffer ↓ DRM/KMS ↓ Weston / Qt ↓ APP 首屏也就是说阶段负责内容UEFI点亮屏幕显示 LOGODisplay Hand-Off把 framebuffer 信息交给 Linuxsimplefb / efifbLinux 早期接住画面DRM/KMS正式显示驱动接管APP显示最终业务界面10. Jetson 中的关键配置在 Jetson UEFI 中类似下面的配置很关键SOC Display Hand-Off Mode Always SOC Display Hand-Off simplefb / efifb可以这样理解配置含义SOC Display Hand-Off Mode是否执行显示交接Always始终尝试把 UEFI 显示状态交给 LinuxSOC Display Hand-Off选择交接方式simplefb通过 Device Tree 交接efifb通过 EFI framebuffer 交接如果没有正确开启可能出现UEFI 阶段 LOGO 正常 Linux Kernel 一启动屏幕黑掉 等 DRM/KMS 或 APP 起来后才重新显示如果配置正确显示链路会更加平滑UEFI LOGO ↓ Linux early display 接住 ↓ DRM/KMS 接管 ↓ APP 首屏显示11. 为什么开启后仍然可能黑屏Display Hand-Off 不是万能开关。实际 bring-up 中仍然可能遇到黑屏、花屏或闪屏。11.1 framebuffer 信息错误常见问题framebuffer 地址错误 framebuffer size 不够 stride 不正确 format 不匹配 width / height 不匹配可能现象花屏 颜色异常 画面错位 LOGO 显示异常11.2 framebuffer 内存被覆盖UEFI 绘制 LOGO 使用的是一块内存。如果 Linux 启动后没有正确保留这块内存它可能被内核重新分配导致LOGO 被破坏 画面突然变乱 启动中途花屏11.3 Linux 没有对应 early framebuffer 驱动需要确认内核是否支持相关驱动例如CONFIG_FB_SIMPLE CONFIG_FB_EFI CONFIG_DRM_SIMPLEDRM如果 Bootloader 传了信息但 Linux 没有驱动接收屏幕仍然可能黑。11.4 DRM/KMS 接管时闪屏即使 early display 阶段正常DRM/KMS 正式接管时也可能重新配置显示管线导致短暂黑屏或闪屏。这类问题通常要继续看 DRM/KMS 日志和显示模式设置过程。12. 工程调试方法遇到 Jetson 启动显示问题可以按阶段排查。现象可能阶段排查方向上电后一直无显示UEFI 前后电源、屏幕、HPD、接口、pinmuxUEFI 有 LOGOLinux 启动后黑Display Hand-Offsimplefb/efifb、DT、kernel configLOGO 花屏framebuffer 参数地址、stride、format、sizeKernel 早期正常后面闪一下DRM/KMSmode setting、connector、驱动切换系统起来后无 APP 画面用户空间Weston、Qt、APP、自启动服务APP 首屏慢rootfs/应用systemd、图形服务、APP 初始化常用命令dmesg|grep-iframebufferdmesg|grep-isimpledmesg|grep-iefifbdmesg|grep-isimpledrmdmesg|grep-idrm查看 framebuffercat/proc/fbls-l/dev/fb*如果走 simplefb可以检查 Device Treels/proc/device-tree/chosen/ dtc-Idtb-Odts-oout.dts kernel.dtbgrep-iframebuffer out.dtsgrep-isimple-framebuffer out.dts13. 我的理解以前看启动 LOGO容易理解成Bootloader 显示一张图 Linux 起来后再显示一张图 APP 起来后再显示自己的界面但 Jetson UEFI 的 Display Hand-Off 让我更清楚地看到好的启动显示体验不是每个阶段各画各的而是显示状态在不同阶段之间连续传递。可以把它理解成一次接力UEFI 我先点亮屏幕显示 LOGO。 Linux early display 我先接住 framebuffer不让屏幕黑。 DRM/KMS 我建立正式显示管线接管长期显示。 APP 我显示业务首屏替换启动 LOGO。这就是从 Bootloader 到 APP 首屏的显示接力机制。总结Jetson 启动 LOGO 无黑屏切换本质依赖一条完整的显示接力链路Bootloader / UEFI ↓ Display Hand-Off ↓ Linux early framebuffer ↓ DRM/KMS ↓ APP 首屏其中最关键的一步是UEFI 把 framebuffer 信息交给 Linux early display这个过程可能通过simplefb efifb simpledrm完成。它解决的问题是Linux 启动时不要打断 Bootloader 已经点亮的显示带来的价值是减少黑屏 减少闪屏 提升启动体验 方便 bring-up 调试 让 Bootloader 到 APP 首屏显示更加连续一句话总结Jetson 启动 LOGO 无黑屏切换不是某个阶段单独完成的而是 Bootloader、Linux early display、DRM/KMS 和 APP 首屏之间完成了一次连续的显示接力。
延伸阅读

更多相关文章

2026/10/23 15:50:03

Blockly+AI嵌入式IDE:面向新手的硬件开发范式革新

1. 项目概述:这不是另一个图形化玩具,而是一次嵌入式开发范式的试探性突围“硬件版 Cursor”这个说法一出来,我手里的咖啡杯就停在半空——不是因为兴奋,而是本能地皱眉。Cursor 在软件开发圈里是什么地位?它不是个代码…

2026/10/18 13:29:20

UniApp 自定义下拉选择组件:9项配置实现单/多选与异步搜索

UniApp 自定义下拉选择组件:9项配置实现单/多选与异步搜索在移动应用开发中,下拉选择组件是最常用的交互元素之一。UniApp作为跨平台开发框架,虽然提供了基础的下拉选择器,但在实际业务场景中,我们往往需要更灵活、功能…

2026/10/23 15:48:56

JavaScript核心机制详解:事件循环、作用域与异步编程避坑指南

简介:这是一份面向JavaScript初学者的系统教程,适合对编程感兴趣但尚未系统接触过JS的人,也适合有一定基础想深入理解核心概念的开发者,目标是解决语法零散、DOM操作不熟、异步逻辑混淆等常见入门难题。资源包仅含1个docx文档&…

2026/10/23 15:48:56

Rake接收机Matlab仿真:分集接收与合并技术详解

简介:这份资源面向无线通信、扩频与CDMA方向的学习者和研究人员,提供Rake接收机的Matlab仿真实现,用于理解多径衰落信道下的分集接收与信号合并机制。压缩包为rar格式,共2个文件,均为.m脚本,分别对应发射端…

2026/10/23 15:48:56

Windows Server 2012 R2 离线安装 IIS 8.5 完整指南:SxS 源配置与避坑

简介:这份离线安装包面向需要在无外网环境中为 Windows Server 2012 R2 部署或更新 IIS 的 IT 管理员与运维人员,解决内网、隔离机房或严格网络安全策略下无法在线拉取系统组件的问题。压缩包共 1568 个文件,约 99.04MB,以 dll 动…

2026/10/23 15:43:53

多重ELISA检测:从单靶标定量到多因子并行分析的技术演进

简述酶联免疫吸附测定(ELISA)作为经典的蛋白定量方法,长期以来是生物标志物检测的“金标准”。然而,随着对复杂疾病分子网络认知的深入,单一靶标检测在通量、样本消耗和系统性信息获取方面的局限日益凸显。多重ELISA检…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑