NXP MCU 技术论坛
直播中

王艳

8年用户 1372经验值
私信 关注
[问答]

如何使用Linux映像在IMX8ULP上启用自定义logo?

Hi,
我正在使用IMX8ULP EVK替换为IMXEBOOKD5(带有 EPDC 接口的 e-ink 显示)并使用 Linux 映像启动 EVK。我需要替换默认的燕尾服 (logo_linux_clut224.ppm)带有自定义 LOGO。

1.我已将默认徽标 logo_linux_cult224.ppm(路径 -/home/user/Linux_BSP/build/tmp/work-shared/imx8ulp-lpddr4-evk/kernel-source/drivers/video/logo)替换为我的自定义徽标,该徽标使用以下命令转换为 ppm 格式:
>pngtopnm custom_logo.png > custom_logo.pnm
>pnmquant 224 custom_logo.pnm > custom_logo224.pnm
>pnmtoplainpnm custom_logo224.pnm > logo_linux_clut224.ppm
2.由于以上更改无法加载自定义 logo,我检查并修补了 defconfig 文件config_logo_linux_clut224=y 已启用,因为它之前未启用。但是在构建之后,发现我的自定义 logo 被 defult Tux logo 覆盖了,因此启动后没有发生任何变化。
我该如何解决这个问题?
                                                                                                                                                                                                                                                                                                        

回帖(1)

张艳

2025-4-1 18:06:34

根据您的描述,您在替换IMX8ULP启动Logo时遇到了问题。以下是分步解决方案:




1. 验证Logo文件格式


确保转换后的PPM文件符合内核要求:


# 检查文件头是否为"P3"标识(ASCII Plain格式)
head -n 2 custom_logo224.ppm
# 输出应类似:
# P3
# 宽度 高度

若输出为P6(二进制格式),需使用pnmtoplainpnm转换:


pnmtoplainpnm custom_logo224.pnm > custom_logo224.ppm



2. 内核配置检查


确认内核已启用Logo支持:


# 在内核源码目录下检查配置
grep -E "CONFIG_LOGO=|CONFIG_LOGO_LINUX_CLUT224=" .config


  • 若未启用,通过make menuconfig配置:
    Device Drivers → Graphics support → Bootup logo → [*] Standard 224-color Linux logo




3. 清理构建缓存


Yocto/BSP构建可能缓存旧文件,需彻底清理:


# 删除共享工作区中的缓存
rm -rf /home/user/Linux_BSP/build/tmp/work-shared/imx8ulp-lpddr4-evk/kernel-source/
# 或执行全编译清理
bitbake -c cleansstate linux-imx
bitbake -c clean linux-imx



4. 确保文件被正确替换


将自定义Logo覆盖到内核源码树:


# 替换前备份原文件
cp custom_logo224.ppm /home/user/Linux_BSP/build/tmp/work-shared/imx8ulp-lpddr4-evk/kernel-source/drivers/video/logo/logo_linux_clut224.ppm



5. 调整Yocto配方(关键步骤)


若使用Yocto构建,需通过bbappend文件永久替换Logo:




  1. 创建自定义层(如未创建):


    bitbake-layers create-layer meta-custom
    bitbake-layers add-layer meta-custom



  2. meta-custom/recipes-kernel/linux/linux-imx_%.bbappend中添加:


    FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
    SRC_URI += "file://logo_linux_clut224.ppm"
    do_configure:append() {
       cp ${WORKDIR}/logo_linux_clut224.ppm ${S}/drivers/video/logo/
    }



  3. 将自定义Logo复制到meta-custom/recipes-kernel/linux/linux-imx/目录。






6. 重新编译内核


触发完整构建以确保更改生效:


bitbake linux-imx -f -c compile && bitbake linux-imx



7. EPDC显示适配检查


由于使用电子墨水屏,需确认:



  • 内核中启用CONFIG_FB_MXC_EINK_PANEL

  • 启动参数正确设置EPDC分辨率:
    # 在U-Boot中检查bootargs
    setenv bootargs "console=ttyLP0,115200 root=/dev/mmcblk1p2 rootwait video=mxcepdcfb:E060SCM,bpp=16"




8. 调试启动过程



  • 禁用默认Logo:在内核参数添加logo.nologo,观察是否显示空白。

  • 查看内核日志
    dmesg | grep -i "logo"
    # 正常应输出"Console: switching to colour frame buffer device"




9. 备用方案:直接嵌入Logo到dtb


若仍无效,可将Logo直接编译进设备树:


# 将Logo转换为Hex格式
ppmtohex < logo_linux_clut224.ppm > logo.hex
# 在设备树中添加:
/ {
    chosen {
        linux,logo = /incbin/("logo.hex");
    };
};



通过以上步骤,您应能成功替换启动Logo。若问题持续,请检查EPDC驱动是否正常初始化framebuffer,并确认Logo分辨率不超过屏幕限制。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分