![在这里插入图片描述](https://img-blog.csdnimg.cn/20210124161549181.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU1NTg4OA==,size_16,color_FFFFFF,t_70#pic_center)
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
(3)最后将pnm图片转换成我们需要的ppm
pnmtoplainpnm utulinux_logo_224.pnm > logo_linux_clut224.ppm
logo_linux_clut224.ppm就是我们转换最终得到的linux图片支持格式。
1.4将生成的logo图片替换自带企鹅logo
把得到的logo_linux_clut224.ppm替换drivers/video/logo中logo_linux_clut224.ppm图片(默认为企鹅),并将logo_linux_clut224.c与logo_linux_clut224.o文件删除。
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_do_show_logo(info, &image, rotate, n); 将n改成1
修改源码/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);
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
->Console display driver support
->Framebuffer Console support ([=y])
->Map the console to the primary display device
->Framebuffer Console Rotation
重新编译并烧录到开发板中,重启即可显示新logo。
4.调试过程中的问题与方法
4.1黑屏且无法运行QT测试程序
问题1:
一直处于黑屏状态,运行QT例程提示Unable to figure out framebuffer device. Specify it manually.
方法:
注释设备树下相关语句,如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210124161200505.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU1NTg4OA==,size_16,color_FFFFFF,t_70)
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/fbdev/console/fbcon.c中的 fb_flashcursor()函数和fbcon_cursor()函数。
将上述两个函数内容注释,使这两个函数为空函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)