2. logo显示¶
本章节介绍通过psplash实现开机logo
2.1. 获取psplash源码¶
使用git命令拉取psplash工具所在的git仓库:
1 | git clone git://git.yoctoproject.org/psplash
|
如果访问困难的也可以下载板卡配套网盘资料,资料网盘/1-野火开源图书_教程文档/配套代码/psplash.tar.gz
2.2. 修改psplash源码¶
2.2.1. logo图片转换¶
准备png格式的logo图片,为了后续与教程步骤统一,将图片命名为logo-linux.png,然后放到psplash源码顶层目录中。
可以使用ubuntu logo进行测试:
通过make-image-header.sh工具将png格式转换为POKY特定格式的图像头部文件,在到psplash源码顶层目录执行:
1 | ./make-image-header.sh logo-linux.png POKY
|
生成特定格式的图像头部文件logo-linux-img.h。
2.2.2. 修改指定的logo图片¶
修改psplash.c指定生成的logo-linux-img.h为需要显示的图片转换文件,将官方原来的psplash-poky-img.h注释,添加我们生成的logo-linux-img.h
1 2 | //#include "psplash-poky-img.h"
#include "logo-linux-img.h"
|
2.2.3. 关闭进度条显示¶
只显示logo图片,不需要显示进度条,因为进度条进度显示需要其他服务启动不断去写psplash_fifo才能改变进度条进度,例如在某个服务添加 echo “PROGRESS 50” > /etc/init.d/psplash_fifo就是将进度条进度改为50%。
修改psplash-config.h,将PSPLASH_SHOW_PROGRESS_BAR定义改为0,关闭进度条显示,如下:
然后将psplash-bar-img.h,将进度条边框信息修改为0,如下:
2.2.4. 配置生成Makefile¶
制作autogen.sh脚本,用于生成Makefile,创建autogen.sh脚本并添加以下内容:
1 2 3 4 5 | #!/bin/bash
aclocal
autoheader
automake --add-missing
autoconf
|
添加执行权限:
1 | chmod 777 autogen.sh
|
运行autogen.sh会生成Makefile.am
1 | ./autogen.sh
|
修改生成的Makefile.am,将psplash_SOURCES变量中的psplash-poky-img.h修改成logo-linux-img.h,修改完如下所示:
执行./configure –host=arm-linux生成Makefile
1 | ./configure --host=arm-linux
|
如果是交叉编译的,需要修改生成的Makefile的编译,指定使用aarch64-linux-gnu-gcc交叉编译工具,如果是板卡编译的可直接使用gcc。
1 2 3 4 5 6 7 8 9 | #修改生成的Makefile
#CC = gcc
CC = aarch64-linux-gnu-gcc
#CPP = gcc -E
CPP = aarch64-linux-gnu-gcc -E
#ac_ct_CC = gcc
ac_ct_CC = aarch64-linux-gnu-gcc
|
执行make编译生成arm64框架的可执行psplash文件
1 | make
|
生成的psplash就是我们需要的显示logo的可执行文件,并且框架是ARM aarch64的,如果不是,请确认Makefile的编译器是否指定使用aarch64-linux-gnu-gcc。
2.3. 板卡配置logo显示¶
2.3.1. 添加配置脚本¶
将生成的psplash传到板卡的/usr/bin/目录下,然后添加执行权限:
1 | sudo chmod 777 /usr/bin/psplash
|
创建/etc/init.d/psplash.sh启动配置脚本,在脚本添加以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #!/bin/sh
### BEGIN INIT INFO
# Provides: psplash
# Required-Start:
# Required-Stop:
# Default-Start: S
# Default-Stop:
### END INIT INFO
read CMDLINE < /proc/cmdline
for x in $CMDLINE; do
case $x in
psplash=false)
echo "Boot splashscreen disabled"
exit 0;
;;
esac
done
export TMPDIR=/mnt/.psplash
mount tmpfs -t tmpfs $TMPDIR -o,size=40k
rotation=0
if [ -e /etc/rotation ]; then
read rotation < /etc/rotation
fi
/usr/bin/psplash --angle $rotation &
|
给/etc/init.d/psplash.sh添加执行权限:
1 | sudo chmod 777 /etc/init.d/psplash.sh
|
2.3.2. 添加自启动服务¶
创建/usr/lib/systemd/system/psplash.service并添加以下内容:
1 2 3 4 5 6 7 8 9 10 11 | [Unit]
Description = logo daemon
DefaultDependencies=no
[Service]
ExecStart=/etc/init.d/psplash.sh
Restart = always
Type = simple
[Install]
WantedBy = multi-user.target
|
使能psplash.service服务:
1 | sudo systemctl enable psplash.service
|
完成以上步骤后,重启板卡,可以在屏幕上看到logo,如下图。