制​作​u​-​b​o​o​t​ ​L​C​D​开​机​l​o​g​o​ ​及​L​C​D​字​符​显​示​错​误​的​解​决

本文介绍如何在U-Boot中实现自定义开机Logo,并解决版本信息显示不全的问题。通过修改LCD驱动和使用特定脚本转换图片,最终实现开机Logo的显示。此外,还详细记录了解决U-Boot 2008.10版本信息显示异常的过程。

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

前段时间总感觉忙,驱动、应用瞎搞一通,移植的uboot也是缺胳膊少腿,都是没开机logo的,只实现了基本功能。最近闲下来了,想弄些好玩点的东西,从那开始呢?还是uboot,把uboot一点一点完善起来,这应该是一个比较有意思的过程。做一个自己喜欢的开机logo,岂不是很炫。。。  
要想显示logo,当然我们首先要做的是修改完善lcd的驱动,修改驱动这一块我就不赘述了,网上一搜一大把,不过推荐一下Tekkaman Ninja 的博客,参照他的肯定是没问题的。  
以下引自Tekkaman Ninja  
/******************************************************************************  图片的放置路径
所有的开机logo都放在了 /tools/logos 之下,你只需要将你的班子作对应的logo替换就好了。
对于S3C2440,你只需要将denx.bmp替换成你想要的logo就好了。
对于ATMEL的芯片,据说会显示ATMEL的logo,所以替换那个logo即可。
但是你所替换的logo必须和原来的大小、格式一模一样,否则会出现u-boot使用过程中宕机重启的后果。
--------------------------------------------------------------------------------  
二、图片的大小标准
不同的logo对应不同的大小,这里S3C2440所对应的是160*96分辨率的BMP图片。  -------------------------------------------------------------------------------- 
三、图片的转换脚本
在制作图片前,请您现确认您的Linux主机上安装了Netpbm 工具包。如果是Ubuntu,你可以直接用新立得安装;如果是别的发行版,可以在 Netpbm主页 下载源代码编译。    将你想要的图片裁减成160*96的JPG图片,然后用以下的脚本处理一下就好了: #!/bin/sh
#install Netpbm first
    jpegtopnm $1 | ppmquant 31 | ppmtobmp -bpp 8 > $2
使用方法: (脚本名) ( 待处理的JPG图片名) (输出文件名) /************************************************* 以上方法试验后是没问题的。
另外关于图片转换,还有另一种方法
可以用任何工具把需要处理的logo图片转换成bmp格式图片,大小160*96像素,色彩深度256色,即8bpp(8位色深),然后保存为你需要的文件名字。  
做完上述工作后logo的显示是没问题的,由于我用的uboot版本为 2008.10 与Tekkaman Ninja  不同 ,修改完的代码编译后,uboot版本信息在LCD上的显示无法换行,有一部分的版本信息被覆盖,导致显示不正常。这一度让我很没头绪,到底从哪解决呢?  
现在看来还是我不了解版本信息是如何被打印的,导致我无从下手解决这个问题,最后反复


       
 


看源码总算找到了这句话  
printf ("%s\n", version_string);  
添加打印的正是版本信息,good  
再搜关键字version_string,  
发现在drivers/video/cfb_console.c 1200行左右有下面这个函数  
static void *video_logo (void) {
 char info[128];
 extern char version_string;  int space, len, y_off = 0;  
可见在LCD打印信息的语句是在这个函数里的   
 logo_plot (video_fb_address, VIDEO_COLS, 0, 0);  
 sprintf (info, " %s", &version_string);//这是在LCD上打印信息的语句  
 space = (VIDEO_LINE_LEN / 2 - VIDEO_INFO_X) / VIDEO_FONT_WIDTH;  len = strlen(info);  
 if (len > space) {
  video_drawchars (VIDEO_INFO_X, VIDEO_INFO_Y,      (uchar *)info, space);
  video_drawchars (VIDEO_INFO_X + VIDEO_FONT_WIDTH,      VIDEO_INFO_Y + VIDEO_FONT_HEIGHT,      (uchar *)info + space, len - space);   y_off = 1;  } else
  video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y, (uchar *)info);  
红色部分是需要添加的代码 目前只发现2008.10这个版本的uboot需要添加这部分代码,如果其他版本的uboot出现这种情况,大家不妨检查一下这个函数,或许会找到原因。  
编译,运行,好的,显示没任何问题了。 
本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-08/39658.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值