Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1242739
  • 博文数量: 105
  • 博客积分: 127
  • 博客等级: 入伍新兵
  • 技术积分: 962
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-29 15:22
文章分类

全部博文(105)

文章存档

2021年(1)

2019年(3)

2018年(1)

2017年(11)

2016年(47)

2015年(32)

2014年(4)

2012年(6)

我的朋友

分类: 嵌入式

2016-01-27 16:06:29

                    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, 生成狸猫----增加三个文件。见附件吧。linux logo.rar

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);


阅读(4541) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

_Gorden_2020-06-20 23:13:19

694543965:好,参考了!

z真彩色我搞不定啊,里面代码头文件也包错了吧

回复 | 举报

_Gorden_2020-06-20 23:13:12

694543965:好,参考了!

z真彩色我搞不定啊,里面代码头文件也包错了吧

回复 | 举报

6945439652018-04-26 22:07:55

好,参考了!