当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > LINUX 启动logo 总结

LINUX 启动logo 总结 时间:2018-09-28      来源:未知

LINUX 启动logo 总结

 近在imx6上需要调试linux下启动logo。其实linux启动logo 以前没少调,但这次弄了好久,也发现以前调过的没有积累。

之所以这次logo弄了很久是因为fsl bsp 实现keep uboot logo to kernel ,但又在我使用的BSP上没有完全弄好。话说那个还是

有很牛逼,简单来说就是uboot实现好logo,然后kernel 中不需要对相应的显示时钟进行重新初始化,还有很多其他的类似一样

的道理,就是相信uboot中已经弄好了。废话到此。说说一般的linux 启动logo。

 

一,企鹅法(224级,或者224色)

企鹅图片的文件名logo_linux_clut224.ppm,在driver/video/logo目录下。采用netpbm 工具生成想要替换的logo,这里要注

意一下图片的尺寸大小 。

例如将PNG格式的图片转换成logo_linux_clut224.ppm:

    # pngtopnm my.png > my.pnm

    # pnmquant 224 my.pnm > logo224.pnm

    # pnmtoplainpnm logo224.pnm > logo_linux_clut224.ppm

 

Note: 可能会出现如下错误提示

drivers/video/logo/logo_linux_clut224.ppm: Binary PNM is not supported

Use pnmnoraw(1) to convert it to ASCII PNM

这个可能是因为你的ppm 图片是bin格式,需要转换成ascii 格式。方法如下:

pnmnoraw logo_linux_clut224.ppm > logo_linux_clut224_ascii.ppm

替换目录中的文件重新编译就OK了。当然这时候你会发现显示位置需要调整。默认是左上角对齐。产品中可能更多是中心对齐。

中心对齐的方法。

1,修改drivers/video/fbmem.c  fb_show_logo_line函数中,修改如下

    //image.dx = 0; //左上角 x起点

   //image.dy = y; //调用时指定的参数 y起点

    image.dx = (info->var.xres / 2) - (image.width / 2);  //中心

    image.dy = (info->var.yres / 2) - (image.height / 2); //中心

    image.width = logo->width;

    image.height = logo->height;

 

Note:info->var.xres和info->var.yres是分辨率大小,image.width,image.height是logo图片的大小。

起点位置的修改

2,修改drivers/video/console/fbcon.c  fbcon_prepare_logo函数里,修改如下

    logo_height = fb_prepare_logo(info, ops->rotate);

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

结束位置的修改

    这里需要补充一点,就是关于boot logo 的配置与光标 cursor的问题(第二种方法里面说吧)。

 

Device Drivers --->    Graphics support --->

    [*]Boot logo --->

       [*] Standard 224-color Linux logo

支持 kernel console,不选看不到 logo:

Device Drivers --->     Graphics support --->

     Console display driver support --->

       <*> Framebuffer Console support

 

二,真彩色TFT LINUX LOGO (使用此方法比较简单,更能满足客户的需求)

显示图片可以是rgb565 ,不局限于原来的224色 ,方法相当于直接将要显示的图片输出到Framebuffer。记录一下方法吧。

  1, 生成狸猫----增加三个文件。

true_lanrry_logo.h //LCD显示信息,深度及声明

lanrry_logo_data.h //定义的图片的数据,我采用ImageLCD工具取模

framebuffer_logo.c //实现打印数据到framebuffer

均放在drivers/video目录下,并且修改Makefile ,添加framebuffer_logo.c。 

  2,狸猫换太子----修改drivers/video/fbmem.c里的代码

 

 a,添加 #define TRUE_COLOR

 b,修改如下:

      +#ifdef TRUE_COLOR

      +#include "truecolor_logo.h"

      +#endif

 c,修改函数int fb_show_logo(struct fb_info *info, int rotate)

  {

    //狸猫换太子

    +#ifdef TRUE_COLOR

    +fb_show_truecolor_logo(info);

    +return 1;

    #else

    int y;  

    y = fb_show_logo_line(info, rotate, fb_logo.logo, 0,

                  num_online_cpus());

        num_online_cpus   cpu 数量,linux logo 企鹅数量。

 d,修改fb_prepare_logo函数以改变高度,该函数的后return处改为

 #ifdef TRUE_COLOR

    return fb_prepare_extra_logos(info, YRES, YRES);

 #else

    return fb_prepare_extra_logos(info, fb_logo.logo->height, yres);

 #endif

 重新编译完之后,就能全部显示

 

这种方法是采用替换boot logo 。全屏显示的时候,也是会发现有光标问题。解决方法如下:

修改drivers/video/console/bitblit.c文件的bit_cursor函数,在该函数结尾处的 。

 if (err)

    soft_cursor(info, &cursor);

改为

 if (0)

    soft_cursor(info, &cursor);

上一篇:理解C语言的声明

下一篇:OpenVPN 服务器搭建

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部