转载地址:http://blog.chinaunix.net/uid-9688646-id-1998453.html

参考资料:
【1】U-boot开机logo的制作方法(Tekkaman Ninja):http://blog.chinaunix.net/u1/34474/showart_2085233.html
【2】U-Boot中的Splash Screen(Charlie Chen):http://blog.chinaunix.net/u1/51797/showart.php?id=2070554
【3】UBOOT LCD驱动流程(牛蹄印章):http://blog.chinaunix.net/u3/90973/showart_2303809.html

在有实现LCD显示和LCD命令行终端的U-boot中,默认情况下在左上角都有显示一个logo,如果是atmel的芯片,就会有atmel的logo,三星的则是denx的logo。如果想把它改成自己喜欢的或者公司的logo,则只要作简单的修改便可以实现。

一、图片的放置路径

所 有的开机logo都放在了 /tools/logos 之下,所以,把你需要显示的logo图片(bmp格式)也放置到该目录下。根据你所设置的显示帧缓存的大小,图片大小有所限制。使用这种方法还有一个限制 是:图片只能是8bpp的bmp图(参考uboot源码)。Tekkman文章中所说的“所替换的logo必须和原来的大小、格式一模一样,否则会出现 u-boot使用过程中宕机重启的后果”,我自己亲测中并未遇到,当然,我也并没有做足够的测试,只是这并不需要和原图的大小一模一样。

二、修改Makefile文件
修改/tools目录下的Makefile文件,大约是44~46行

ifeq ($(LOGO_BMP),)
LOGO_BMP= logos/denx.bmp
endif

把 denx.bmp 替换为你需要显示的logo图片的文件名,保存退出,重新编译uboot。

三、图片的转换脚本
在制作图片前,请您现确认您的Linux主机上安装了Netpbm 工具包。如果是ubuntu,你可以直接用新立得安装;如果是别的发行版,可以在 Netpbm主页 下载源代码编译。然后用以下的脚本处理一下就好了:

#!/bin/sh
#install Netpbm firstjpegtopnm $1 | ppmquant 31 | ppmtobmp -bpp 8 > $2

使用方法: (脚本名) ( 待处理的JPG图片名) (输出文件名)

关于uboot的lcd驱动的编写,可参考资料【3】和Tekkaman的uboot移植源码以及相应的芯片数据手册。参考资料【2】中的BMP命令不是必须的,不过实现了这个命令可以方便调试。

U-Boot中的Splash Screen

U-Boot配置

在U-Boot中使用Splash Screen,可以实现U-Boot启动后,在LCD上显示自定义图片,起到友好的界面显示作用。使用Splash Screen需要在配置文件中使能BMP图片功能和SPLASH功能:

#define CONFIG_CMD_BMP
#define CONFIG_SPLASH_SCREEN

实例

并且要定义splashimage变量以及在splash变量所定义的地址存放bmp图片。以2MB的SST30VF1601为例,工32个扇区,规划如下:

项目

地址范围

扇区

大小

说明

U-Boot

0x0000 0000 ~ 0x0010 0000

0~15

1M

参数

0x0010 0000 ~ 0x0018 0000

16~23

512K

splashimage

0x0018 0000 ~ 0x0020 0000

24~31

512K

操作

现在要实现splash screen,需要进行操作,先下载一个图片到内存中,然后擦除FLASH的splashimage区域,接着将图片写入splashimage区域,最后设置并保存splashimage环境变量即可。

U-Boot> tftp a0008000 logo.bmp                   ;下载文件到内存

U-Boot> erase 1:23-31                                 ;擦除Flash的splashimage区域

U-Boot> cp.b a0008000 00180000 $filesize    ;将logo写到Flash的splashimage区域

U-Boot> setenv splashimage 00180000         ;设置splashimage环境变量

U-Boot> saveenv                                         ;保存环境变量

u-boot启动后,输入bmp d $splashimage即可在LCD上显示logo图片。为了实现开机就显示logo,可以修改common/lcd.c文件,在其中加入实现 bmp d $splashimage的代码即可。

#############################################3

自定义u-boot的开机logo的方法

我用的u-boot是2009.08版的。想要修改开机logo为自定义的图片,而不是原来的denx.bmp。
方法其实很简单,只需替换u-boot的tools/logos目录中的denx.bmp,再重新编译(可能需要先执行make clean,再make,新的图片
才会起作用),图片大小不要起过你的屏的大小,色彩深度不能大于256色,即8位色深的图片。
不过,如果你不想替换denx.bmp,而要用自已的图片文件,比如,我用的是rat-linux.bmp文件,也可以。把你的文件拷贝
到/tools/logos目录中,再修改/tools目录下的makefile文件,找到以下代码段

ifeq ($(LOGO_BMP),)
LOGO_BMP= logos/denx.bmp
endif
ifeq ($(VENDOR),atmel)
LOGO_BMP= logos/atmel.bmp
endif
ifeq ($(VENDOR),ronetix)
LOGO_BMP= logos/ronetix.bmp
endif
将其中的LOGO_BMP= logos/denx.bmp改为 LOGO_BMP= logos/rat-linux.bmp即可。重新编译,你的图片就可以起作用了。

U-boot开机logo的制作方法
在有实现LCD显示和LCD命令行终端的U-boot中,在左上角都有显示一个logo,如果是atmel的芯片,就会有atmel的logo,三星的则是denx的logo。
有的网友发邮件说想改成自己公司的Logo,而且如果是自己玩的话,改成自己喜欢的logo也爽阿。所以今天我做好了实验,将简单的修改方法总结如下:

一、图片的放置路径

所有的开机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图片名) (输出文件名)

2.6 的Kernel LOGO真容易改试着改了一下,似乎比2.4容易。2.6的logo数据在/drivers/video/logo里,ppm文件就是logo图像了。每 个ppm对应一个.c文件,内容大概就是图像尺寸、调色板、位图数据等信息。.c文件无需自己建立,在make的时候如果不存在某个ppm文件对应的.c 文件,就会自动从ppm生成一个,然后把它编译成.o文件。所以看看目录下哪些.ppm文件有同名的.o文件,就说明那个logo被编译进了 kernel。标准的224色logo是logo_linux_clut224.ppm,因此修改这个图片就可以实现修改logo了。
在 windows下,可以用PaintShopProX直接打开ppm进行编辑,编辑完毕后用decrease color depth命令降为224色,然后保存,把logo_linux_clut224.c删掉,重新make就可以了。这个是我昨晚随便改的logo :

在 深入一点点。很容易发现,对于一般的vga console,logo是由drivers/video/fbmem.c里的fb_show_logo()函数显示的,这个函数的调用者是 drivers/video/console/fbcon.c(跟2.4差不多,嗯)。这个函数做的事情不多,就是先把非8位色深的位图转换为8位色深, 然后用info->fbops->fb_imageblit(info, &image);把logo显示出来,有一个cpu时显示一个logo,有2个cpu时显示2个,以此类推。

略加修改,就可以实现将logo居中显示,并加入一个“重复显示右边界”,也就是把logo最右边4个点宽的区域作为背景填充到整个logo bar。diff如下:

--- /gs2e/source/linux26-2edev/drivers/video/fbmem.c2006-08-29 14:07:15.000000000 +0800
+++ ./fbmem.c2006-09-27 20:40:08.000000000 +0800
@@ -375,9 +375,9 @@
int fb_show_logo(struct fb_info *info)
{
u32 *palette = NULL, *saved_pseudo_palette = NULL;
-unsigned char *logo_new = NULL;
-struct fb_image image;
-int x;
+unsigned char *logo_new = NULL, *border = NULL;
+struct fb_image image, imageborder;
+int x, xoffset;

/* Return if the frame buffer is not mapped or suspended */
if (fb_logo.logo == NULL || info->state != FBINFO_STATE_RUNNING)
@@ -421,12 +421,45 @@
image.height = fb_logo.logo->height;
image.dy = 0;

+#ifdef CONFIG_LOGO_REPEAT_RIGHT
+border = kmalloc(4 * fb_logo.logo->height, GFP_KERNEL);
+if (border != NULL){
+  for (x = 0; x < fb_logo.logo->height; x++){ /* use x as y */
+*((u32 *)border + x) = /* will repeat 4 pixels of the right side*/
+*(u32 *)(image.data + (x+1)*fb_logo.logo->width - 4);
+  }
+  imageborder.depth = 8;
+  imageborder.data = border;
+  imageborder.width = 4;
+  imageborder.height = image.height;
+  imageborder.dy = 0;
+  for (x = 0; x < info->var.xres; x+=4){
+imageborder.dx = x;
+info->fbops->fb_imageblit(info, &imageborder);
+  }
+  kfree(border);
+}
+#endif
+#ifndef CONFIG_CENTER_LOGO
+xoffset = 0;
for (x = 0; x < num_online_cpus() * (fb_logo.logo->width + 8) &&
      x <= info->var.xres-fb_logo.logo->width; x += (fb_logo.logo->width + 8)) {
image.dx = x;
info->fbops->fb_imageblit(info, &image);
}
-
+#else
+xoffset = (info->var.xres - num_online_cpus() * (fb_logo.logo->width + 8))>>1;
+if (xoffset<0)xoffset = 0;
+        for (x = xoffset; x < num_online_cpus() * (fb_logo.logo->width + 8) + xoffset  &&
+             x <= info->var.xres-fb_logo.logo->width+xoffset; x += (fb_logo.logo->width + 8)) {
+               image.dx = x;
+               info->fbops->fb_imageblit(info, &image);
+}
+#endif
kfree(palette);
if (saved_pseudo_palette != NULL)
info->pseudo_palette = saved_pseudo_palette;

我在这里定义了两个配置变量,CONFIG_LOGO_REPEAT_RIGHT和CONFIG_CENTER_LOGO,修改/drivers/video/logo/Kconfig,加上:

config CENTER_LOGO
        bool "Center logo"
        depends on LOGO
        default n
config LOGO_REPEAT_RIGHT
        bool "Repeat the right border (4 pixels)"
        depends on LOGO
        default n

这样就可以在make menuconfig之类的界面中设置是否开启这两项功能了。
更多关于logo hack的信息,可以参考:
http://gentoo-wiki.com/HOWTO_Linux_Logo_Hack

GMT+8, 2011-3-2 16:59, Processed in 0.600615 second(s), 5 queries.

uboot开机logo相关推荐

  1. U-boot开机logo的制作方法

    此文是对早期文章<U-boot开机logo的制作方法>  的更新. --------------------------------------       如果在uboot中实现了LCD ...

  2. u-boot开机logo修改及kernel启动动画去除

    1.开机logo: 替换:MfgTool-MYIMX6A9-L4.1.15\Profiles\Linux\OS Firmware\image-L4.1.15-uboot\my_logo.bmp 图片要 ...

  3. 全志V3s学习记录(4)uboot:开机logo

    文章目录 一.制作JPG图片并处理成BMP格式 二.修改开机LOGO 增加logo显示配置 三.logo居中 参考: 全志v3s学习笔记(3)--u-boot开机logo替换 参考: 开机logo替换 ...

  4. rk3399 u-boot修改开机logo以及开机动画和开机视频

    首先分析了一下uboot启动流程中的一部分代码,如下 第一部分:开机logo(下面代码分析排版有点乱,可以忽略) 1. ​ board_late_init //rk33xx.cboard/rockch ...

  5. android开机画面在uboot里吗,uboot里开机LOGO显示功能解析

    uboot里开机LOGO显示功能解析 开机LOGO,对于绝大多数带显示屏的电子产品都是必备的一个功能,是产品开机的第一印象,重要性不言而喻的,那我们下面就看看这个是怎么实现的. 要尽早的显示出LOGO ...

  6. RK3288 制作内核开机logo

    安装工具 sudo apt-get install netpbm 1.制作图片 (1).图片为bmp格式 $ convert logo.bmp logo.png $ pngtopnm logo.png ...

  7. [SPRD] Q 版本开机 logo 显示原理

    基础知识 开机 logo 和充电 logo 资源位置 vendor\sprd\release\bmp\unisoc_bmp 根据你的编译选项使用对应 logo bmp vendor\sprd\rele ...

  8. amlogic logo amlogic rk tvbox 电视盒 定制化开发(一) 开机logo 定制

    电视机顶盒定制化开发,最简单也是最常见的的是开机logo的 定制. RK amlogic  全志各个平台虽然用到的方法都略有不同.但,都殊途同归. 下面就拿amlogic 为例.记录一下 开机logo ...

  9. Android系统定制开机logo和开机动画

    定制开机logo和开机动画 开机logo 开机动画 bootanimation.zip 生成zip文件 添加新的开机动画 开机logo MTK ASOP中lk阶段的logo是开机后的第一个界面,也被称 ...

  10. 展锐平台 Android 10.0 OTA升级开机Logo

    通过OTA升级更换开机logo图片 展锐部分平台的logo是放在pac包的时候才去更新的.所以只有线刷pac包,才能更新logo,如果我们需要在OTA升级包含开机logo则需要单独修改,以sl8541 ...

最新文章

  1. ubuntu下搭建一个数据化处理的开发环境
  2. 前端每周清单第 52 期: Webpack 4.0,GraphQL 安全加固,去中心化的 Web
  3. python tf_TF 2.1.0-rc2发布,2020年停止支持Python 2
  4. Linux C 串口属性设置
  5. Vue取消eslint语法限制
  6. c 获取mysql安装路径_linux查看mysql安装路径
  7. Unity3D中JavaScript与C#对比
  8. 基础计算机构,基础计算与设计
  9. java validate校验_自定义工具类实现validate参数校验
  10. vs2017修改服务器地址大全,vs2017更改默认pip安装服务器地址
  11. IT怎么寻求工作机会
  12. 转速、电流双闭环控制的直流调速系统
  13. cmd命令:批量创建文件夹
  14. Tbase 源码 (六)
  15. 使用js完成一个类似于小广告的功能,斜着运动,遇到边界弹回
  16. Unity iOS使用ASTC格式纹理实践
  17. 函数柯里化curry 与合成函数 compose
  18. mysql和mongodb查询性能测试_MongoDB 模糊查询,及性能测试
  19. Component is missing template or render function
  20. openstack虚拟机热迁移优化如何治本?

热门文章

  1. log4j日志设置error级别以上
  2. 好看的2020年html倒计时源码
  3. 进销存excel_不用再花钱买软件做进销存,这份免费的Excel系统送你,财务收
  4. c语言编写记账程序,C语言会计记账管理系统
  5. 算法设计与分析第六章习题解答与学习指导(第2版)屈婉婷 刘田 张立昂 王捍贫编著 清华大学出版社
  6. win10 SqlServer2008 卸载 亲测可行
  7. Pandas官方文档(中文版)Pdf
  8. 用python文本挖掘分析_文本挖掘和文本分析的九大应用场景
  9. Coin3D三维可视化教程8
  10. 每位程序员必读的书单