Linux2.6的LOGO制作与显示

在移植linux2.6.24到YC2440的过程中,在logo显示部分遇到问题,终于解决,特此记录。

一、首先说明logo显示相关程序。
(1)在driver/video/console/fbcon.c文件中,函数fncon_init(),为虚拟设备结构体VC赋值,并调用本文件中的fbcon_prepare_logo()函数,为显示logo做准备。
(2)fbcon_prepare_logo(),调用了fb_prepare_logo()函数(此函数在driver/video/fbmem.c中)。
(3)fb_prepare_logo()中调用了fb_find_logo()函数(此函数在driver/video/logo/logo.c中),这个函数会根据配置文件找到相应的logo数据,这个数据就是logo文件夹下logo_xxx_xxx.ppm生成的,我的linux就是logo_linux_clut224.ppm。
(4)fb_prepare_logo()函数获取了照片信息后进行一次判断,看图片高度是否超过屏幕高度,否则,不显示。
(5)fbcon_prepare_logo()函数获取图片数据后,又进一步处理判断,用照片的高度除以字模高度后,于屏高度除以字模高度的值相比较,判断图片可否显示。若过大,则打印显示“fbcon_init:disable boot-logo(boot-logo bigger than screen)”。

二、然后,在以上的基础,说明我的问题,我的屏幕是800*600,移植同等大小图片后不显示,且打印fbcon_init:disable boot-logo(boot-logo bigger than screen)。
不明白为什么同样大小的图片不显示??
仔细阅读源码,定位于fbcon_prepare_logo()函数,发现计算屏幕显示所需行数是计算方法为:
logo_lines=(logo_height+vc->vc_font.height-1)/vc->vc_font.height;
而后来与之相比较的vc->vc_bottom=info->var.yres(屏幕高度)/vc_font.height;
不明白这是为什么??这样算法不公平的啊??
于是,更改为:
logo_lines=(logo_height)/vc->vc_font.height;
编译后,800*600图片显示成功!!
不知道这样有什么隐患。至少现在没发现……

三、最后,说明图片的制作,这个网上一堆资料……哈哈!

首先准备一幅自己喜欢的图片,然后将该图片保存成png格式,例如linuxlogo.png。在Linux下使用下面的命令:
# pngtopnm linuxlogo.png > linuxlogo.pnm
# pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm
# pnmtoplainpnm linuxlogo224.pnm > linuxlogo224.ppm
mv linuxlogo224.ppm logo_linux_clut224.ppm
然后将logo_linux_clut224.ppm替换$WORKSPACE/linux-2.6.8.1/drivers/video/logo文件夹中的logo_linux_clut224.ppm(最好做好备份)

好,结束!O(∩_∩)O哈哈~!


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值