ST意法半导体
登录
直播中
张娟
8年用户
2245经验值
私信
关注
[问答]
如何在stm32mp1上添加对动画启动画面的支持呢?
开启该帖子的消息推送
STM32
LINUX内核
u-boot
大家好,
如何在
STM32
mp1 上添加对动画启动画面的支持?
我了解用于自定义引导屏幕的 psplash 配方,它工作得很好。我想在系统启动时播放动画。
任何输入都非常感谢。
回帖
(1)
叶冬琳
2022-12-16 15:03:16
psplash 配方用于配置 Linux 内核动画启动画面!!!
在 U-Boot = 加载内核期间是否需要动画?
或者在 Linux 启动期间(直到用户空间准备就绪/应用程序正在运行)?
PSplash 是一个用户空间图形启动启动画面,主要用于支持 16bpp 或 32bpp 帧缓冲区的嵌入式 Linux 设备。它几乎没有依赖项(只有 libc),支持基本的图像和文本并处理旋转。它的视觉外观可以通过基本的源代码更改来配置。还包括一个“客户端”命令实用程序,用于向 psplash 发送信息,例如引导进度信息。
所以“psplash”配方链接到 Linux 内核中的引导屏幕/不链接到 U-Boot
对于 U-Boot 方面,我认为 U-Boot 中不存在通用功能“动画启动画面”
除了内核的 U-Boot 加载之外的任何平台都应该足够快以避免动画需要....
对于 Linux 部分,如果您使用我们的 Yocto 项目参考图像,这些图像使用 Linux 内核的闪屏功能,它只支持静止图像。
如果考虑动画,您需要将 pslash 支持更改为 plymouth
“psplash”和“plymouth”是通用的 Linux / Yocto 特性。
它们不喜欢 OpenSTLInux 或 STM32MP15,您应该找到它们的资源。
=> 今天仅支持固定徽标 (CONFIG_LCD_LOGO / CONFIG_VIDEO_LOGO)
或显示存在于 extlinux.conf 中的背景 BMP 文件 (./cmd/pxe_utils.c:1442 = bmp_display)
最后一个选项用于 OpenSTLinux / ST 板上,因为它对开发人员来说更容易
和演示(U-Boot 启动画面/Linux psplash = boots 中使用了相同的文件)
元-st/meta-st-stm32mp/classes/extlinuxconf-stm32mp.bbclass
splashscreen_name = localdata.getVar('UBOOT_EXTLINUX_SPLASH')
但是由于 stm32mp15 的 U-Boot 提供了一个视频驱动程序,您可以实现任何板特定的功能来更新板上的附加屏幕。
动画可以在弱函数 show_boot_progress() 中处理,当 CONFIG_SHOW_BOOT_PROGRESS=y 时使用,因为它在 common/Kconfig.boot 中定义
=> 你需要直接处理帧缓冲区来创建动画(例如,进度条,
您可以在代码中使用准备缓冲区并按原样使用 video_sync_copy() & video_sync()
在 video_bmp_display 中完成)
今天,一些开发板使用这个弱函数 show_boot_progress() 来处理引导 LED 或打印
这个控制台上的启动信息......但我没有看到任何动态显示更新!
最简单的图形解决方案是激活视频控制台并显示进度
在环境为“stdout=serial,vidconsole”的屏幕上(uart 上的输出相同)
=> 您可以在 U-Boot 控制台中显示启动进度,
例如在 board/st/stv0991/stv0991.c 中:
#if
CONFIG_IS_ENABLED(启动阶段)
void show_boot_progress(int 进度)
{
printf("%in", 进度);
}
#万一
但它不是动画启动画面,只是控制台信息。
您也可以直接使用视频控制台 API(就像在 splash_display_banner 中所做的那样)
避免在 vidconsole 上复制 uart 控制台信息
=> 使用便宜的“进度条”,例如只为每个预期进度显示“#”字符
通过使用 API:vidconsole_position_cursor() / vidconsole_put_string() / vidconsole_put_char()
警告:进度值不是 lineaire,最后一步是 BOOTSTAGE_ID_RUN_OS = 15 并且它不是最大的枚举 bootstage_id
或者在视频控制台上显示进度值:
void show_boot_progress(int 进度)
{
字符缓冲区[3];
结构udevice *开发;
int col, row, ret;
ret = uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &dev);
如果(退)
返回;
sprintf(buf, "%03in", 进度);
vidconsole_position_cursor(dev, 10, 10);
vidconsole_put_string(con, buf);
}
警告:vidconsole 函数应仅在重新分配后/当视频控制台准备就绪时调用
避免问题,应在此示例中添加一些保护。
psplash 配方用于配置 Linux 内核动画启动画面!!!
在 U-Boot = 加载内核期间是否需要动画?
或者在 Linux 启动期间(直到用户空间准备就绪/应用程序正在运行)?
PSplash 是一个用户空间图形启动启动画面,主要用于支持 16bpp 或 32bpp 帧缓冲区的嵌入式 Linux 设备。它几乎没有依赖项(只有 libc),支持基本的图像和文本并处理旋转。它的视觉外观可以通过基本的源代码更改来配置。还包括一个“客户端”命令实用程序,用于向 psplash 发送信息,例如引导进度信息。
所以“psplash”配方链接到 Linux 内核中的引导屏幕/不链接到 U-Boot
对于 U-Boot 方面,我认为 U-Boot 中不存在通用功能“动画启动画面”
除了内核的 U-Boot 加载之外的任何平台都应该足够快以避免动画需要....
对于 Linux 部分,如果您使用我们的 Yocto 项目参考图像,这些图像使用 Linux 内核的闪屏功能,它只支持静止图像。
如果考虑动画,您需要将 pslash 支持更改为 plymouth
“psplash”和“plymouth”是通用的 Linux / Yocto 特性。
它们不喜欢 OpenSTLInux 或 STM32MP15,您应该找到它们的资源。
=> 今天仅支持固定徽标 (CONFIG_LCD_LOGO / CONFIG_VIDEO_LOGO)
或显示存在于 extlinux.conf 中的背景 BMP 文件 (./cmd/pxe_utils.c:1442 = bmp_display)
最后一个选项用于 OpenSTLinux / ST 板上,因为它对开发人员来说更容易
和演示(U-Boot 启动画面/Linux psplash = boots 中使用了相同的文件)
元-st/meta-st-stm32mp/classes/extlinuxconf-stm32mp.bbclass
splashscreen_name = localdata.getVar('UBOOT_EXTLINUX_SPLASH')
但是由于 stm32mp15 的 U-Boot 提供了一个视频驱动程序,您可以实现任何板特定的功能来更新板上的附加屏幕。
动画可以在弱函数 show_boot_progress() 中处理,当 CONFIG_SHOW_BOOT_PROGRESS=y 时使用,因为它在 common/Kconfig.boot 中定义
=> 你需要直接处理帧缓冲区来创建动画(例如,进度条,
您可以在代码中使用准备缓冲区并按原样使用 video_sync_copy() & video_sync()
在 video_bmp_display 中完成)
今天,一些开发板使用这个弱函数 show_boot_progress() 来处理引导 LED 或打印
这个控制台上的启动信息......但我没有看到任何动态显示更新!
最简单的图形解决方案是激活视频控制台并显示进度
在环境为“stdout=serial,vidconsole”的屏幕上(uart 上的输出相同)
=> 您可以在 U-Boot 控制台中显示启动进度,
例如在 board/st/stv0991/stv0991.c 中:
#if
CONFIG_IS_ENABLED(启动阶段)
void show_boot_progress(int 进度)
{
printf("%in", 进度);
}
#万一
但它不是动画启动画面,只是控制台信息。
您也可以直接使用视频控制台 API(就像在 splash_display_banner 中所做的那样)
避免在 vidconsole 上复制 uart 控制台信息
=> 使用便宜的“进度条”,例如只为每个预期进度显示“#”字符
通过使用 API:vidconsole_position_cursor() / vidconsole_put_string() / vidconsole_put_char()
警告:进度值不是 lineaire,最后一步是 BOOTSTAGE_ID_RUN_OS = 15 并且它不是最大的枚举 bootstage_id
或者在视频控制台上显示进度值:
void show_boot_progress(int 进度)
{
字符缓冲区[3];
结构udevice *开发;
int col, row, ret;
ret = uclass_get_device(UCLASS_VIDEO_CONSOLE, 0, &dev);
如果(退)
返回;
sprintf(buf, "%03in", 进度);
vidconsole_position_cursor(dev, 10, 10);
vidconsole_put_string(con, buf);
}
警告:vidconsole 函数应仅在重新分配后/当视频控制台准备就绪时调用
避免问题,应在此示例中添加一些保护。
举报
更多回帖
rotate(-90deg);
回复
相关问答
STM32
LINUX内核
u-boot
如
何在
Windows
上
使用
STM32
CubeProgrammer将
STM32MP1
Starter Kit固件烧录进MicroSD卡?
2022-02-28
1709
请问如
何在
STM32MP1
上
使用touchGFX?
2023-01-30
594
基于Bootsplash打造嵌入式Linux
启动画面
2019-07-03
3630
如何安装
stm32mp1
上
的mongodb、mariadb和postgresql?
2022-12-30
571
求教LabVIEW编写的程序如何
添加
启动
加载进度
画面
2012-04-12
6315
如
何在
STM32MP1
上
模拟MCU看门狗复位
呢
?
2023-01-17
547
android开机
动画
调试笔记
2022-02-10
2040
请问allegro怎样设置才能键盘移
动画面
?
2019-04-29
4107
iMX8
MP
显示uboot标志直到Android
启动动画
,如何防止内核黑屏的信息?
2023-04-23
663
STM32MP1
的SJA1105Q它有linux驱动程序吗
2022-12-06
501
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分