By Toradex秦海
1). 简介
Linux开机启动画面(Splash Screen)是指在Linux启动时候显示的图片,通常包含U-boot splash screen和Linux kernel splash screen两部分组成,默认情况下Linux只是输出一些传统的小企鹅图标和启动Console命令行,但嵌入式设备都需要定制自己开机画面,本文就基于NXP iMX8X ARM处理器平台测试配置启动画面。
本文所演示的平台来自与Toradex Colibri iMX8X计算机模块,由于Toradex当前提供的Linux BSP V5.x版本中采用了Mainline U-boot 2020.04版本,同时U-boot在启动显示过程中时间非常短暂,因此没有在U-boot中添加相关显示支持,也就无法配置U-boot splash screen,因此本文着重演示Linux Kernel splash screen的配置。
2). 准备
a). Colibri iMX8X ARM核心版配合Iris 载板,连接调试串口UART1(载板X22)到开发主机方便调试,连接7英寸显示屏用于显示,显示屏分辨率为800x480。
b). 参考这里说明更新Toradex Ycoto Linux Multimedia Demo Image BSP V5.4版本到Colibri iMX8X模块。
3). 创建启动画面所需图片
a). Linux开发主机安装如下图像制作相关软件包
----------------------------------------------------------------------------
$ sudo apt-get install gimp
$ sudo aptget install tgif xfonts-100dpi xfonts-75dpi
----------------------------------------------------------------------------
b). 根据自己的需要利用gimp工具创建合适分辨率的图片,详细说明请见这里。这里将做好的图片命名为“toradexlogo_800x480.ppm”
c). 修改图片颜色和编码
----------------------------------------------------------------------------
$ ppmquant 224 toradexlogo_800x480.ppm > toradexlogo_800x480_224.ppm
$ pnmnoraw toradexlogo_800x480_224.ppm > toradexlogo_800x480_ascii_224.ppm
----------------------------------------------------------------------------
d). 将最终图片改为系统默认名字后备用
----------------------------------------------------------------------------
$ cp toradexlogo_800x480_ascii_224.ppm logo_custom_clut224.ppm
----------------------------------------------------------------------------
4). 下载Linux kernel源代码并集成开机画面图片
a). 参考这里说明下载对应计算机模块的对应版本源代码,这里下载Ycoto Linux BSP5.x源代码,如果下载环境不支持git协议,也可以使用https(https://git.toradex.com/linux-toradex.git)
----------------------------------------------------------------------------
$ git clone -b toradex_5.4-2.3.x-imx git://git.toradex.com/linux-toradex.git
----------------------------------------------------------------------------
b). 将步骤3生成的图片文件复制到下载的源码对应目录
----------------------------------------------------------------------------
$ mv logo_custom_clut224.ppm linux-kernel/drivers/video/logo/
----------------------------------------------------------------------------
5). 重新编译Linux kernel
a). 参考这里的说明下载和配置编译toolchain
./ 这里下载64bit toolchain 9.2版本
----------------------------------------------------------------------------
$ cd ~
$ wget -O gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz "https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz?revision=61c3be5d-5175-4db6-9030-b565aae9f766&la=en&hash=0A37024B42028A9616F56A51C2D20755C5EBBCD7"
$ tar xvf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz
$ ln -s gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu gcc-linaro
----------------------------------------------------------------------------
./ 配置环境变量输出
----------------------------------------------------------------------------
$ export ARCH=arm64
$ export DTC_FLAGS="-@"
$ export PATH=~/gcc-linaro/bin/:$PATH
$ export CROSS_COMPILE=aarch64-none-linux-gnu-
----------------------------------------------------------------------------
b). 参考这里说明生成默认config文件
----------------------------------------------------------------------------
$ make toradex_defconfig
----------------------------------------------------------------------------
c). 参考这里说明修改config文件添加开机画面图片
----------------------------------------------------------------------------
### 进入Device Drivers -> Graphics support -> Bootup logo -> 选择 "Custom 224-color Linux logo"之后保存 ###
$ make menuconfig
----------------------------------------------------------------------------
d). 参考这里说明编译新的Linux kernel binary文件,编译好的文件位于arch/arm64/boot/Image.gz
----------------------------------------------------------------------------
$ make -j$(nproc) Image.gz 2>&1 | tee build.log
----------------------------------------------------------------------------
e). 参考这里说明编译Kernel modules并打包为kernel-modules.tar.bz2
----------------------------------------------------------------------------
### compile kernel modules ###
$ make -j$(nproc) modules
### package kernel modules for deployment ###
$ mkdir ../kernel-modules
$ sudo -E env "PATH=$PATH" make INSTALL_MOD_PATH=../kernel-modules/ modules_install
$ cd ../kernel-modules
$ tar cjvf kernel-modules.tar.bz2 lib/modules/
----------------------------------------------------------------------------
6). 部署Linux kernel和kernel modules文件
a). 有两种方式可以部署,一种是方便临时测试的基于现有模块Linux系统run-time更新,另一种是方便量产,通过更改适用于Toradex Easy Installer的BSP Image包来更新,下面分别说明。
b). 基于模块现有Linux系统进行run-time更新
./ 通过网络或者U盘等方式将上述生成的Image.gz和kernel-modules.tar.bz2文件上传到模块
----------------------------------------------------------------------------
$ scp arch/arm64/boot/Image.gz ../kernel-modules/kernel-modules.tar.bz2 root@<colibri-imx8x_ipaddr>:/home/root/
----------------------------------------------------------------------------
./ 挂载boot分区
----------------------------------------------------------------------------
$ vi /etc/fstab
### uncomment below item ###
# uncomment this if your device has a SD/MMC/Transflash slot
/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
### end ###
$ reboot
----------------------------------------------------------------------------
./ 替换Linux Kernel
----------------------------------------------------------------------------
$ cd /media/mmcblk0p1/
$ ls
Image.gz imx8dx-colibri-iris-v2.dtb imx8qxp-colibri-iris-v2.dtb
boot.scr imx8dx-colibri-iris.dtb imx8qxp-colibri-iris.dtb
imx8dx-colibri-aster.dtb imx8qxp-colibri-aster.dtb overlays
imx8dx-colibri-eval-v3.dtb imx8qxp-colibri-eval-v3.dtb overlays.txt
$ cp ~/Image.gz .
----------------------------------------------------------------------------
./ 部署Kernel modules
----------------------------------------------------------------------------
$ cd /
$ tar xvf ~/kernel-modules.tar.bz2
$ reboot
----------------------------------------------------------------------------
c). 修改适配适用于Toradex Easy Installer的BSP Image安装包
./ 从这里下载适用于Colibri iMX8x的标准Ycoto Linux Reference Multimedia Demo Image 压缩包,当前最新版本是V5.4
./ 解压压缩包
----------------------------------------------------------------------------
$ tar xvf Colibri-iMX8X_Reference-Multimedia-Image-Tezi_5.4.0+build.11.tar
----------------------------------------------------------------------------
./ 解压boot filesystem并替换Kernel image后重新打包
----------------------------------------------------------------------------
$ cd Colibri-iMX8X_Reference-Multimedia-Image-Tezi_5.4.0+build.11/
$ mkdir bootfs
$ tar Jxf Reference-Multimedia-Image-colibri-imx8x.bootfs.tar.xz -C bootfs/
$ cd bootfs
$ cp .../linux-toradex/arch/arm64/boot/Image.gz .
$ tar Jcf ../Reference-Multimedia-Image-colibri-imx8x.bootfs.tar.xz *
$ rm -rf bootfs
----------------------------------------------------------------------------
./ 解压root filesystem并部署kernel modules后重新打包
----------------------------------------------------------------------------
$ mkdir rootfs
$ sudo tar Jxf Reference-Multimedia-Image-colibri-imx8x.tar.xz -C rootfs/
$ cd rootfs
$ sudo tar xvf .../kernel-modules/kernel-modules.tar.bz2
$ sudo tar Jcf ../Reference-Multimedia-Image-colibri-imx8x.tar.xz *
$ rm -rf rootfs
----------------------------------------------------------------------------
./ 参考这里的说明通过配置模块进入恢复模式后重新下载Toradex Easy Installer运行,然后将上述更改好的image通过U盘或者SD卡更新到模块上面去。
7). 修改显示分辨率
./ 参考这里说明通过修改overlay文件修改显示分辨率适配7寸液晶屏
----------------------------------------------------------------------------
$ cd /media/mmcblk0p1/
$ vi overlays.txt
### modify as below ###
fdt_overlays=colibri-imx8x_parallel-rgb_overlay.dtbo display-lt161010_overlay.dtbo
### end ###
$ reboot
----------------------------------------------------------------------------
8). 修改U-boot环境变量
./ 通过载板调试串口如下修改U-boot环境变量去除显示输出的console打印输出,请注意配置后调试串口的kernel console 输出也会关闭。
----------------------------------------------------------------------------
# setenv setupargs 'vt.global_cursor_default=0 consoleblank=0 console=${console}'
# saveenv && reset
----------------------------------------------------------------------------
9). 最终显示效果
a). 为了从开机画面到应用程序(比如默认的Qt演示应用)切换更自然,可以如下修改Weston 的配置将其改为全黑背景
----------------------------------------------------------------------------
$ vi /etc/xdg/weston/weston.ini
### modify as below patch ###
--- a/etc/xdg/weston/weston.ini.bak
+++ b/etc/xdg/weston/weston.ini
@@ -4,8 +4,10 @@
use-g2d=1
xwayland=true
-#[shell]
+[shell]
#size=1920x1080
+panel-position=none
+background-color=0x00FFFFFF
#[output]
#name=HDMI-A-1
### end ###
$ reboot
----------------------------------------------------------------------------
b). 最终显示效果如下
动态效果如下
10). 总结
本文演示了基于NXP iMX8X ARM处理器在嵌入式Linux下,通过重新编译Linux Kernel配置开机画面以及相应的部署测试。另外,除了静态图片,开机画面也可以显示动画图片,详情可以参考这里。