Blog:
NXP iMX8X 基于 Linux 配置启动画面

2021年12月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的配置。

准备

Colibri iMX8X ARM核心版配合Iris 载板,连接调试串口UART1(载板X22)到开发主机方便调试,连接7英寸显示屏用于显示,显示屏分辨率为800x480。

参考这里说明更新Toradex Ycoto Linux Multimedia Demo Image BSP V5.4版本到Colibri iMX8X模块。

创建启动画面所需图片

Linux开发主机安装如下图像制作相关软件包

$ sudo apt-get install gimp
$ sudo aptget install tgif xfonts-100dpi xfonts-75dpi

根据自己的需要利用gimp工具创建合适分辨率的图片,详细说明请见这里。这里将做好的图片命名为“toradexlogo_800x480.ppm”

修改图片颜色和编码

$ ppmquant 224 toradexlogo_800x480.ppm > toradexlogo_800x480_224.ppm
$ pnmnoraw toradexlogo_800x480_224.ppm > toradexlogo_800x480_ascii_224.ppm


将最终图片改为系统默认名字后备用

$ cp toradexlogo_800x480_ascii_224.ppm logo_custom_clut224.ppm

下载Linux kernel源代码并集成开机画面图片

参考这里说明下载对应计算机模块的对应版本源代码,这里下载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

将步骤3生成的图片文件复制到下载的源码对应目录

$ mv logo_custom_clut224.ppm linux-kernel/drivers/video/logo/

重新编译Linux kernel

参考这里的说明下载和配置编译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-

参考这里说明生成默认config文件

$ make toradex_defconfig   

参考这里说明修改config文件添加开机画面图片

进入Device Drivers -> Graphics support -> Bootup logo -> 选择 "Custom 224-color Linux logo"之后保存

$ make menuconfig        

参考这里说明编译新的Linux kernel binary文件,编译好的文件位于arch/arm64/boot/Image.gz

$ make -j$(nproc) Image.gz 2>&1 | tee build.log

参考这里说明编译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/


部署Linux kernel和kernel modules文件

有两种方式可以部署,一种是方便临时测试的基于现有模块Linux系统run-time更新,另一种是方便量产,通过更改适用于Toradex Easy Installer的BSP Image包来更新,下面分别说明。

基于模块现有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


修改适配适用于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卡更新到模块上面去。

修改显示分辨率

参考这里说明通过修改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

修改U-boot环境变量

通过载板调试串口如下修改U-boot环境变量去除显示输出的console打印输出,请注意配置后调试串口的kernel console 输出也会关闭。

# setenv setupargs 'vt.global_cursor_default=0 consoleblank=0 console=${console}' 
# saveenv && reset

最终显示效果

为了从开机画面到应用程序(比如默认的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

最终显示效果如下


动态效果如下


总结

本文演示了基于NXP iMX8X ARM处理器在嵌入式Linux下,通过重新编译Linux Kernel配置开机画面以及相应的部署测试。另外,除了静态图片,开机画面也可以显示动画图片,详情可以参考这里。

作者: 秦海,技术销售工程师,韬睿(上海)

评论

Please login to leave a comment!
Have a Question?