NXP iMX8X 基于Linux配置启动画面

Posted toradexsh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NXP iMX8X 基于Linux配置启动画面相关的知识,希望对你有一定的参考价值。

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配置开机画面以及相应的部署测试。另外,除了静态图片,开机画面也可以显示动画图片,详情可以参考这里

以上是关于NXP iMX8X 基于Linux配置启动画面的主要内容,如果未能解决你的问题,请参考以下文章

NXP iMX8X M4核心SPI开发

NXP iMX8X M4核心SPI开发

基于NXP iMX8测试Secure Boot功能部署

基于NXP iMX8测试Secure Boot功能部署

基于NXP iMX8测试Secure Boot功能部署

lbios设置linux启动