原创 Linxu开机动画

2021-6-21 15:18 406 1 分类: MCU/ 嵌入式

By Toradex 胡珊逢

开机动画普遍存在于消费类电子设备,特别是手机和平板。嵌入式 Linux 系统除了显示开机 logo 外,同样也可以实现开机动画。本文将在 Colibri iMX8X 计算机模块上介绍如何添加自定义的开机动画。

 

嵌入式设备从上电开机,会经历系统初始化、驱动加载、运行应用,最终在屏幕上显示应用界面。这个过程取决于嵌入式系自身的复杂程度和应用程序,通常可以从几秒到几十秒不等。而期间显示开机进度条或者开机动画能够提升设备的使用体验。文件接下会演示如何使用 PSplash 实现进度条显示,EasySplash 实现内容更加丰富的开机动画。

 

PSplash

这是一个非常精简的工具,极少的第三方软件依赖,首次发布于 2006 年。同时它能够非常容易地集成到  Yocto Project 中,事实上在 Toradex 默认的 Yocto Project 环境中已经包含了相应的 recipe。用户只要在 local.conf 中添加 IMAGE_INSTALL_append = " psplash" 即看到默认的开机进度条。但正由于其精简的特定,任何的修改包括背景图片、颜色都需要通过直接更改头文件,甚至是源代码来完成。在 Yocto Project 中这就需要编写相应的补丁文件。对于简单的图片更改,这会是更加耗时的操作。因此我们接下来使用 Yocto Project 生成的 SDK 直接编译 PSplash。

 

首先下载PSplash 源码。

准备一张和显示屏像素一致的背景图片,格式为 jpg。以及合适尺寸的进度条图片,同样也是 jpg 格式。这里我们使用 7寸 RGB 并口 LCD 显示屏,像素为 800x480。背景图片和进度条图片分别为 toradex.jpg 和 bar.jpg。将图片放在 PSplash 源码目录中。

 

然后使用psplash 自带的 make-image-header.sh 将图片转换为头文件。

 

此时会生成 bar.jpg-img.h 和 toradex.jpg-img.h 两个文件。为了编译方便,分别将其重命名为 psplash-bar-img.h 和 psplash-poky-img.h,否则需要修改 psplash.c 包含新生成的头文件。

 

psplash-config.h 和 psplash-colors.h 两个文件中可以修改显示效果和颜色。例如在 psplash-config.h 中我们使用全屏显示。

在  psplash-colors.h 中将默认背景颜色设置为黑色,和上面背景图片的色彩一致。进度条则为蓝色。

 

配置修改完成后,使用 SDK 进行编译。

 

编译好后,将 psplash 和 psplash-systemd 两个可执行程序复制到安装了 >Linux Reference Minimal V5.3.0 BSP 的 Colibri iMX8X,路径为 /usr/bin/。同时在 /lib/systemd/system 创建下面两个 systemd service 文件,用于 psplash 自启动。

 

psplash-start.service

 

psplash-systemd.service

 

然后执行

 

为了不在屏幕上显示启动日志信息,还需要在 u-boot 中配置以下参数。

 

重启后可以看到屏幕上显示的进度条。

 

EasySplash

借助 PSplash 可以实现简单的进度条显示,如果需要更加生动的开机动画,则可以使用 EasySplash。这是一个非常新的项目,在 2020 年正式发布首个版本。它基本原理是将一个视频文件逐帧拆为 PNG 图片,然后按照一定的帧率再依次显示。在最新的版本中,作者使用 Rust 重写了该项目,支持 gstreamer 直接播放视频文件。本文这里仍旧采用1.0.x 版本,使用图片方式显示开机动画。由于 EasySplash 需要借助一些第三方库如libpng,为了方便测试,Colibri iMX8X 将安装 >Linux Multimedia BSP v5.3.0

 

首先下载 EasySplash 源码。

 

编译 EasySplash。

 

编译完成后将 bin 目录中的 easysplash 和 easysplashctl 可执行二进制文件复制到  Colibri iMX8X 的 /sbin/ 中,easysplash-quit.service 和 easysplash-start.service 复制到 /lib/systemd/system 中。

 

接下来准备需要显示的开机动画文件。 EasySplash 会从 zip 压缩包读取动画播放控制文件和 PNG 图片,zip 压缩包中的内容如下:

 

desc.txt 是动画播放控制文件,part1 和 part2 是两个文件夹,用于存放 PNG 图片。desc.txt 的内容如下,这里用于举例说明。

 

第一行分辨表示显示屏幕宽 800 像素,高 480 像素,以 20 fps 速度显示图片。第二行,p:播放模式,需要完整显示所有的内容后才停止,1:循环次数,0:该参数是遗留变量,不再被使用,part1:PNG 图片存放的位置。用户可以更具需要添加多行来显示其他内容。该文件的详细说明可以参考源码中 doc/Animation-Structure.md。

 

PNG 图片可以通过 ffmpeg 工具从视频文件获取。这里我们采用 EasySplash 自己的 ossystem-demo 中的 mp4 作为演示。

 

将生成的文件压缩为  bootanimation.zip,复制到  Colibri iMX8X 的 /home/root/ 目录。

 

修改 /lib/systemd/system 中  easysplash-start.service 文件,ExecStart 中修改  easysplash 实际存放的路径,同时添加  bootanimation.zip 所在的位置。

 

 

easysplash-quit.service 也是一样。

 

然后执行

 

为了不在屏幕上显示启动日志信息,还需要在 u-boot 中配置以下参数。

 

重启后可以看到开机动画。

 

 

总结

上面介绍了在不改变 BSP 本身结构和应用程序的情况下添加开机进度条或者开机动画,所以这些工具都是用户应用而运行的。为了更早地显示开机动画,也有采用其他方式加载,例如 Torizon,它使用 initial ram disk,在其中运行 plymouth 显示开机动画,并且可以非常方便地对其进行替换。由于 initial ram disk 是在正式的 rootfs 前运行,这是一个非常精简的文件系统,从而能很早完成加载并示画面。Toradex Linux BSP 尚未采用该方式。另外对于需要快速启动的嵌入式设备,开机动画的运行不可避免会占用一部分系统资源,从而影响到主要应用的加载和运行。

作者: hai.qin_651820742, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-1864768.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论1条评论)

登录后参与讨论

我的果果超可爱 2021-6-22 08:48

学习了,期待鸿蒙
相关推荐阅读
hai.qin_651820742 2021-07-16 11:06
iMX8MPlus和iMX8QM机器学习框架eIQ性能对比
By Toradex 胡珊逢机器学习算法对算力要求较高,通常会采用 GPU ,或者专用的处理器如 NPU 进行加速运算。NXP 先后推出的两...
hai.qin_651820742 2021-07-05 17:04
NXP iMX8 SCFW和Boot Container Image编译
By Toradex秦海1). 简介NXP iMX8系列ARM处理器是NXP目前性能最强劲确也是架构最复杂的ARM处理器,和之前的ARMv7系列处理器比如iMX6系列不同,在iMX8系列芯片...
hai.qin_651820742 2021-06-25 15:58
NXP iMX8M Plus 双网口性能测试
By Toradex 胡珊逢Verdin iMX8M Plus 是 Toradex 采用 NXP 最新的 i.MX 8M Plus...
hai.qin_651820742 2021-06-04 15:49
使用VS Code 将 Qt 项目导入到 Torizon
​简介 如果您正在阅读本文,您可能已经了解了 Torizon(易于使用的工业 Linux 软件平台)的基础知识。 您知道它使用容器来提供一个平台,您可以专注于编写自己的应用程序,而 T...
hai.qin_651820742 2021-04-23 15:18
NXP iMX8基于Ycoto Project编译ROS2
By Toradex秦海 1). 简介 基于类似NXP iMX8这样性能强劲的ARM平台处理器,越来越多的工业智能/机器人应用比如AGV/AMR产品控制器在ARM平台上面实现,在这个过程...
广告
我要评论
1
1
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /3 下一条