1. 背景与技术痛点
在 Cardputer Zero、Hackberry Pi 等掌上设备以及各类 Cyberdeck(赛博甲板)DIY 项目中,基于 SPI 或 I2C 接口的微型显示屏应用广泛。此前,为了在操作系统彻底内核加载前尽快点亮屏幕显示 Splash 画面,开发者往往需要引入 U-Boot 作为额外的 Boot 步骤。这种做法增加了 Boot 链复杂度,且影响系统启动连贯性。

为了提升设备的启动响应速度,Raspberry Pi 官方在引导加载程序(Bootloader)中引入了一套内置的微型语言解释器(Little Language),允许在 boot 序列的最早期(数秒内)直接配置并驱动 SPI/I2C 屏幕显示自定义开机画面。
2. 技术原理:Bootloader 内置 DSL
该设计灵感来源于 Noralf Trønnes 的 mipi-dbi 规范,并针对 Bootloader 场景进行了架构优化与扩展:
-
数据静态编译:支持将图像等静态数据直接编译进 Bootloader 二进制文件中,无需依赖文件系统挂载。
-
协议拓展能力:不仅能用于屏幕图像 Dump,还可以直接进行外设寄存器控制(如七段数码管),甚至可以通过过采样 SPI 软件模拟 UART 协议(如开机直接驱动小票打印机输出 Splash 信息)。


7 段数码管驱动代码示例:
# Set the output that we are using
define mled spi [copi 10] [cipo 9] [sclk 11] [cs 8] [freq 1000000]
# Setup the screen and set the brightness
mled 0x0c 0x00
mled 0x09 0x00
mled 0x0b 0x07
mled 0x0a 0x08
mled 0x0f 0x00
# Set each charecter register – shows HELLO
mled 0x01 0x00
mled 0x02 0x00
mled 0x03 0x7e
mled 0x04 0x0e
mled 0x05 0x0e
mled 0x06 0x4f
mled 0x07 0x37
mled 0x08 0x00
# Turn on
mled 0x0c 0x01
3. 如何配置与启用(Beta 固件)
该功能目前已在 Beta 固件中开放测试(注:Raspberry Pi 5 的支持已基本完成,即将在后续更新中开放):
开启 Beta 固件通道:
sudo raspi-config
依次进入 Advanced Settings -> Beta Access 开启权限。
升级系统与固件:
sudo apt update && sudo apt full-upgrade
编译与挂载 Splash 画面: 参考官方仓库 raspberry pi/utils 中的 splashasm 编译工具,将预处理后的二进制文件放入 Boot 固件目录,并在 config.txt 中配置对应路径链接即可。

