Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4250380
  • 博文数量: 241
  • 博客积分: 15936
  • 博客等级: 上将
  • 技术积分: 25293
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 11:22
个人简介

Fedora-ARM

文章分类
文章存档

2016年(3)

2014年(1)

2013年(3)

2012年(50)

2011年(61)

2010年(26)

2009年(27)

2008年(21)

2007年(49)

分类: LINUX

2012-06-17 22:41:30

     此文是对早期文章《U-boot开机logo的制作方法》  的更新。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      如果在uboot中实现了LCD等显示设备的驱动,uboot在启动的时候会在屏幕的左上角显示一个logo,如下图:

       这个logo默认情况(只定义了CONFIG_VIDEO_LOGO是如上图所示的企鹅(如果还定义了CONFIG_VIDEO_BMP_LOGO会是denx的标志),这个是存在于uboot代码中的一个头文件(include/video_logo.h或 bmp_logo.h),如果大家看了这个头文件,发现这个是一个巨大的结构体,其中保存着图片每个像素点的色彩数据。
       这样如果要更换这个默认的logo岂不是自己要生成这样一个数据结构体才行?答案是肯定的。
       但是这样一个结构体要怎么生成呢?这个uboot源码早就为我们想好了,方法其实很简单:

一、准备一张jpeg图片,通过命令行处理为8bit  BMP图片。
       处理脚本如下:

  1. #!/bin/sh
  2. #install Netpbm first
  3. jpegtopnm $1 | ppmquant 31 | ppmtobmp -bpp 8 > $2
     使用方法: (脚本名)  ( 待处理的JPG图片名)  (输出文件名)

     之所以用jpeg转bmp的办法,是通过实验证明这种方面可行且简便。
     图片的大小不一定要和原来一样,你觉得合适就好。

二、将bmp文件放入/tools/logos中,并修改/tools/下的Makefile


  1. # Generated LCD/video logo
  2. LOGO_H = $(OBJTREE)/include/bmp_logo.h
  3. LOGO-$(CONFIG_LCD_LOGO) += $(LOGO_H)
  4. LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_H)
  5. ifeq ($(LOGO_BMP),)
  6. LOGO_BMP= logos/denx.bmp
  7. endif
  8. ifeq ($(VENDOR),atmel)
  9. LOGO_BMP= logos/atmel.bmp
  10. endif
  11. ifeq ($(VENDOR),esd)
  12. LOGO_BMP= logos/esd.bmp
  13. endif
  14. ifeq ($(VENDOR),freescale)
  15. LOGO_BMP= logos/freescale.bmp
  16. endif
  17. ifeq ($(VENDOR),ronetix)
  18. LOGO_BMP= logos/ronetix.bmp
  19. endif
  20. ifeq ($(VENDOR),syteco)
  21. LOGO_BMP= logos/syteco.bmp
  22. endif
红色字体,替换为你制作的bmp文件名。

三、确认配置文件
    一定要定义
  1. #define CONFIG_VIDEO_LOGO
  2. #define CONFIG_VIDEO_BMP_LOGO
     编译的时候,你的bmp文件会被tools/bmp_logo.c编译出的工具bmp_logo
制作成include/bmp_logo.h,并编译进uboot中。


四、重新编译u-boot即可得到显示新logo的u-boot。

效果如下图所示:
由于是8bit色深,颜色就有点怪~

如果你看了drivers/video/cfb_console.c源码,你可能会发现还有一个splashimage的东东可以显示。是的,如果你有张非压缩的BMP图片放在了Nor Flash,你可以在ENV中设置splashimage和splashpos告诉uboot读取和显示的位置。启动的时候,uboot就会显示这个bmp图片。
但是,原生的uboot是只支持Nor Flash和内核的读取的,如果你的图片放在nand flash、SD卡或者SPI、I2C 接口flash中,你可以自己实现将图片文件读取到内存中,然后再显示splash。实现起来并不复杂,关键是使用相关的API函数来读取数据。 

阅读(14555) | 评论(4) | 转发(29) |
给主人留下些什么吧!~~

tekkamanninja2013-08-01 11:00:33

345161974:tekkaman,我把图片放在nand flash里,用的是nand write这个命令去写进去可以的不?我的命令如下:
下载:
 tftp 0x30008000 rt150.bmp
  
清理下:
 nand erase 0x80000 0x60000
  
写进去:  
 nand write 0x30008000 0x80000 0x60000

有个问题是,我的图片并不是0x60000这么大,这样烧写进去,在程序里配置好图片的相关地址,发现uboot并没有背景图,也不知道是不是因为图片大小读取不当导致出问题了呢?

可能是地址不对,如果大小不对起码会现实部分图片。你再看看你的地址设置。几年前的东东了,我也记不得了。

回复 | 举报

3451619742013-07-30 16:38:43

tekkaman,我把图片放在nand flash里,用的是nand write这个命令去写进去可以的不?我的命令如下:
下载:
 tftp 0x30008000 rt150.bmp
  
清理下:
 nand erase 0x80000 0x60000
  
写进去:  
 nand write 0x30008000 0x80000 0x60000

有个问题是,我的图片并不是0x60000这么大,这样烧写进去,在程序里配置好图片的相关地址,发现uboot并没有背景图,也不知道是不是因为图片大小读取不当导致出问题了呢?

dfhf20072012-07-28 15:23:44

good。。。。。。。。。。。。

kangear2012-06-20 20:44:44

领教了,期待大文件系统下载到nandflash的解决…