2. logo显示#
本章节介绍通过psplash实现开机logo
2.1. 获取psplash源码#
使用git命令拉取psplash工具所在的git仓库:
1git 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//#include "psplash-poky-img.h"
2#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#!/bin/bash
2aclocal
3autoheader
4automake --add-missing
5autoconf
添加执行权限:
1chmod 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#修改生成的Makefile
2#CC = gcc
3CC = aarch64-linux-gnu-gcc
4
5#CPP = gcc -E
6CPP = aarch64-linux-gnu-gcc -E
7
8#ac_ct_CC = gcc
9ac_ct_CC = aarch64-linux-gnu-gcc
执行make编译生成arm64框架的可执行psplash文件
1make
生成的psplash就是我们需要的显示logo的可执行文件,并且框架是ARM aarch64的,如果不是,请确认Makefile的编译器是否指定使用aarch64-linux-gnu-gcc。
2.3. 板卡配置logo显示#
2.3.1. 添加配置脚本#
将生成的psplash传到板卡的/usr/bin/目录下,然后添加执行权限:
1sudo chmod 777 /usr/bin/psplash
创建/etc/init.d/psplash.sh启动配置脚本,在脚本添加以下内容:
1#!/bin/sh
2### BEGIN INIT INFO
3# Provides: psplash
4# Required-Start:
5# Required-Stop:
6# Default-Start: S
7# Default-Stop:
8### END INIT INFO
9
10read CMDLINE < /proc/cmdline
11for x in $CMDLINE; do
12 case $x in
13 psplash=false)
14 echo "Boot splashscreen disabled"
15 exit 0;
16 ;;
17 esac
18done
19
20export TMPDIR=/mnt/.psplash
21mount tmpfs -t tmpfs $TMPDIR -o,size=40k
22
23rotation=0
24if [ -e /etc/rotation ]; then
25 read rotation < /etc/rotation
26fi
27
28/usr/bin/psplash --angle $rotation &
给/etc/init.d/psplash.sh添加执行权限:
1sudo chmod 777 /etc/init.d/psplash.sh
2.3.2. 添加自启动服务#
创建/usr/lib/systemd/system/psplash.service并添加以下内容:
1[Unit]
2Description = logo daemon
3DefaultDependencies=no
4
5[Service]
6ExecStart=/etc/init.d/psplash.sh
7Restart = always
8Type = simple
9
10[Install]
11WantedBy = multi-user.target
使能psplash.service服务:
1sudo systemctl enable psplash.service
完成以上步骤后,重启板卡,可以在屏幕上看到logo,如下图。