NXP i.MX6ULL 修改linux内核启动logo

本文介绍如何在TW-AC6G-EVM开发板上修改Linux内核启动时的Logo图片,并解决过程中遇到的各种问题,包括黑屏、白屏、光标显示等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

眺望电子TW-AC6G-EVM开发板上修改linux内核启动logo图片:

编译环境及开发包:
主机:ubuntu18.04
交叉编译器:arm-linux-gnueabihf-gcc
QT5.12.8:qt-everywhere-opensource-src-5.12.8
开发板:TW-AC6G-EVM
Linux:Linux-4.1.15
串口工具:Xshell

注意:本文章的所有命令涉及到的路径均为眺望电子官方环境路径,需根据自身实际环境改变。本文所演示的平台来自于眺望电子 iMX6ULL ARM嵌入式平台,这是一个基于NXP iMX6ULL ARM处理器,主频800MH在 Cortex-A7的核心板。


解决方案:

1.制作Linux内核需要的开机logo(ppm格式)

1.1在Ubuntu系统上安装netpdm工具

命令如下:# sudo apt-get install netpdm

1.2准备所需要的logo图片

图片的大小请参考开发板所使用的分辨率,本文档以1024x600为例,准备一张1024x600的png格式图片,并重命名为utulinux_logo.png。
眺望电子

1.3将我们准备好的logo转换成我们需要的ppm格式

(1)首先将png图片转成pnm

pngtopnm utulinux_logo.png > utulinux_logo.pnm

(2)然后将pnm图片的颜色数限制在224

pnmquant 224 utulinux_logo.pnm > utulinux_logo_224.pnm 

pnmquant 224 utulinux_logo.pnm > utulinux_logo_224.pnm

(3)最后将pnm图片转换成我们需要的ppm

pnmtoplainpnm utulinux_logo_224.pnm > logo_linux_clut224.ppm

logo_linux_clut224.ppm就是我们转换最终得到的linux图片支持格式。
pnmtoplainpnm utulinux_logo_224.pnm > logo_linux_clut224.ppm

1.4将生成的logo图片替换自带企鹅logo

把得到的logo_linux_clut224.ppm替换drivers/video/logologo_linux_clut224.ppm图片(默认为企鹅),并将logo_linux_clut224.clogo_linux_clut224.o文件删除。
将生成的logo图片替换自带企鹅logo

2.修改部分代码使logo居中显示

修改源码/driver/video/fbdev/core/fbmem.c中的fb_show_logo_line函数。
增加:

image.dx = (info->var.xres/2) - (image.width/2);    
image.dy = (info->var.yres/2) - (image.height/2);

代码中的位置(大概在500行左右)如下:

 /*
image.dx = 0;       
mage.dy = y;
 */
image.width = logo->width;
image.height = logo->height;    
image.dx=(info->var.xres/2)-(image.width/2);        
image.dy=(info->var.yres/2)-(image.height/2); 

fb_show_logo_line

修改:fb_do_show_logo(info, &image, rotate, n); 将n改成1
fb_do_show_logo(info, &image, rotate, n)

修改源码/driver/video/console/fbcon.c中的fbcon_prepare_logo()函数
增加:

logo_height += (info->var.yres/2) - (logo_height/2);  

代码中的位置:

logo_height = fb_prepare_logo(info, ops->rotate);
logo_height += (info->var.yres/2)-(logo_height/2); 
logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);   

logo_height += (info->var.yres/2) - (logo_height/2);

3.配置内核使能 Linux logo 显示

打开 Linux 内核图形化配置界面,按下路径找到对应的配置项:

-> Device Drivers 
	-> Graphics support 
		-> Bootup logo ([=y]) 
			-> Standard black and white Linux logo 
			-> Standard 16-color Linux logo 
			-> Standard 224-color Linux logo

 Linux 内核图形化配置界面

		->Console display driver support
				->Framebuffer Console support ([=y]) 
				->Map the console to the primary display device
				->Framebuffer Console Rotation

111
112

重新编译并烧录到开发板中,重启即可显示新logo。

4.调试过程中的问题与方法

4.1黑屏且无法运行QT测试程序

问题1:
一直处于黑屏状态,运行QT例程提示Unable to figure out framebuffer device. Specify it manually.
方法:
注释设备树下相关语句,如下图:
iomuxc

4.2开机白屏,无法显示启动logo,QT运行正常

问题2:
无法显示开机企鹅logo,显示白屏,运行QT例程正常。
方法:
修改源码/driver/video/fbdev/mxsfb.c中的mxsfb_probe()函数
注释:

/*
memcpy(fb_info->screen_base,(void*)0x84000000,fb_info->fix.smem_len);	
msleep(100);
*/

4.3同等大小图片不显示

问题3:
分辨率为1024x600的屏幕无法显示分辨率为1024x600的logo图片,打印信息为fbcon_init:disable boot-logo(boot-logo bigger than screen)。
方法:
修改源码/driver/video/fbdev/console/fbcon.c中的fbcon_prepare_logo()函数
更改前:logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);
更改后:logo_lines=(logo_height)/vc->vc_font.height;
logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height+1);

4.4启动logo显示正常但有光标一同显示

问题4:
去除kernel启动显示logo的光标
方法:
修改源码/driver/video/console/fbcon.c中的 fb_flashcursor()函数和fbcon_cursor()函数。
将上述两个函数内容注释,使这两个函数为空函数。

4.5 去掉显示串口信息

修改文件系统文件:
屏蔽相关文件
自启动文件 cd /etc/init.d/psplash.sh 的最后一行

/usr/bin/psplash –angle $rotation &

QT启动文件 /etc/rc5.d/S95qt.sh

1.屏蔽/etc/inittab 的倒数第二行#1:2345:respawn:/sbin/getty 38400 tty$1
/etc/inittab

2./etc/init.d/banner.sh中的倒数两行

#echo > $vtmaster
#echo "Please wait: booting..." > $vtmaster

/etc/init.d/banner.sh

重启reboot可以看到logo画面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

眺望电子-ARM嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值