u-boot logo全屏显示

来源:互联网 发布:oppor9怎么备份数据 编辑:程序博客网 时间:2024/04/28 06:05

最近闲来无事逛论坛,看到了有关u-boot全屏显示logo的帖子,http://bbs.csdn.net/topics/390328046,自己也没做过,试了下,可行,下面分享给各位。

u-boot版本是:u-boot-2010.06

开发板:AT91SAM9X35

LCD屏:480*272

其实在u-boot中显示较小的logo还是比较容易的,在/u-boot-2010.06/tools/logos 中默认就有几个小的图片,只要include/configs/at91sam9x5ek.h中定义了有关LCD的一些宏,如:CONFIG_LCD_LOGO,CONFIG_LCD_INFO,CONFIG_LCD_INFO_BELOW_LOGO,u-boot编译后开机都会有一个较小的logo在屏幕的左上角显示,我的是ATMEL的logo

现在说说如何做全屏显示logo!

1.将u-boot默认显示的文字去掉,去掉CONFIG_LCD_INFO这个宏

2.获取一张480*272的图片,注意图片格式必须为:xxx.bmp,8位深度


3.将图片文件命名为 atmel.bmp,将/u-boot-2010.06/tools/logos/下面原来的atmel.bmp覆盖掉。

4.编译u-boot,烧录

一看,图片是有显示了,但只显示了一半。


奇怪了,这是为何?慢慢看源码,发现每次编译后,u-boot都会在include下面生成一个新的bmp_logo.h文件,这个是由tools/bmp_logo生成的,打开bmp_logo.h看看

#define BMP_LOGO_WIDTH 480
#define BMP_LOGO_HEIGHT 272
#define BMP_LOGO_COLORS 240
#define BMP_LOGO_OFFSET 16

这是获取到你刚刚拷贝进去的图片的信息,如果是对的,就继续往下看,下面有2个数组,图片的数据就在这里

unsigned short bmp_logo_palette[]={.....}和unsigned char bmp_logo_bitmap[] = {....}

往下看,发现bmp_logo_bitmap数组中的数据的下半截全部为0x0了,怪不得。为什么会为0x0?可能就是生成数据的bmp_logo有问题了,打开bmp_logo.c看看

这就是生成bmp_logo.h的东东,看看生成bmp_logo_bitmap数组那段:

printf ("unsigned char bmp_logo_bitmap[] = {\n");
for (i=(b->height-1)*b->width; i>=0; i-=b->width) {
for (x = 0; x < b->width; x++) {
b->data[(uint16_t) i + x] = (uint8_t) fgetc (fp) + DEFAULT_CMAP_SIZE;
}
}

width和height都是对的,原来是这个uint16_t(unsigned short型)搞的鬼,改为uint32_t(unsigned int型),再编译,看bmp_logo.h 

嗯,不错,这会数据全部都有了,烧录,重启,有了我们预设的图片了!


图片人物有些地方出现了绿点,这是我用photoshop将原图jpg编辑后就出现的,如果在初期就把图片设计好,应该没多大问题了!


0 0
原创粉丝点击