修改linux/Android启动logo

[-]
  1. 一修改uboot显示开机logo
  2. 二修改由kernel显示的开机logo
    1. 安装pngtopnm
    2. 制作logo图片
    3. 制作ppm格式的图片
    4. 拷贝文件到相应目录
    5. 内核的配置
  3. 三修改由Android系统显示的静态开机画面
    1. 制作要显示的图片
    2. 将图片转换为raw格式
    3. 将raw格式转化为rle文件
    4. 将initlogorle拷贝到文件系统中
    5. 特别说明
  4. 四修改由Android显示的android文字开机动画

修改linux/Android启动logo/开机画面

转载请注明出处:http://blog.csdn.net/drivelinux/article/details/8593788


一、修改uboot显示开机logo


此处有两种情况,一种情况是通过uboot提供的logo显示功能显示开机logo,另一种情况是通过定制显示函数来进行logo的显示。
对于第一种情况,只需要在tools/logos目录下添加自己的logo图片xxx_logo.bmp(需要为bmp格式并且位深度为8),并修改tools目录下的makefile文件即可。在makefile文件中的相应位置加入如下代码:

ifeq ($(VENDOR),xxx)
LOGO_BMP= logos/xxx_logo.bmp
endif


对于第二种情况,一般需要自己将bmp文件保存到数组中,并在程序中将数组中的图片数据写入到lcd缓冲区进行logo的显示。
此时,按如下步骤进行操作:
1.制作一张logo,并保存为uboot_logo.bmp文件;
2.在linux操作系统中,执行命令:gzip -9 uboot_logo.bmp,对图片进行压缩并生成uboot_logo.bmp.gz文件;
3.执行xxd -i uboot_logo.bmp.gz > uboot_logo.h,压缩后的图片数据转化为数组并保存成.h文件;
4.利用uboot_logo.h文件里的数组进行logo的显示即可。
此处,需要将图片进行gzip压缩,否则可能会出现“Bad gzipped data uboot”的错误提示,并且无法显示logo。

二、修改由kernel显示的开机logo

1、安装pngtopnm

sudo apt-get install netpbm 
安装完以后就会生成pngtopnm、pnmquant、pnmtoplainpnm三个工具。

2、制作logo图片

将logo图片保存为mylogo.png,注意扩展名为png。

3、制作.ppm格式的图片

pngtopnm mylogo.png > mylogo.pnm 
pnmquant 224 mylogo.pnm > mylogo224.pnm 
pnmtoplainpnm mylogo224.pnm > logo_linux_clut224.ppm

4.拷贝文件到相应目录

用logo_linux_clut224.ppm替换kernel/drivers/video/logo目录下的同名文件,删除对应的.o文件并重新编译内核即可。

5.内核的配置

内核中除了要选中 Graphics support项下的 Bootup logo配置项外,还要选中 Console display driver support配置项。否则kernel不会显示logo。


三、修改由Android系统显示的静态开机画面

1. 制作要显示的图片

使用PS制作一张和当前lcd分辨率相同的图片,保存时选“存储为 Web 所用格式”,然后在弹开的窗口上,“预设”项选择“PNG-24”,保存为android_logo.png。

2. 将图片转换为raw格式

使用linux下的ImageMagick自带的convert命令,进行raw格式转换,命令为:
convert -depth 8 android_logo.png rgb:android_logo.raw
如果当前系统没有安装该工具,可以执行下面的命令安装:
sudo apt-get install imagemagick

3. 将raw格式转化为rle文件

 需要用到android编译后的rgb2565工具,该工具在android/out/host/linux-x86/bin目录下(android为当前源码所在目录),转换命令如下:
 rgb2565 -rle < android_logo.raw > initlogo.rle
至此,需要显示的图像已经做好了,即initlogo.rle。

4.将initlogo.rle拷贝到文件系统中

将initlogo.rle拷贝到out\target\product\pantherboard\root下,并替换同名文件。然后重新制作文件系统映像并烧写即可。

5.特别说明

该图片是在system/core/init/init.c文件中显示的,具体函数调用过程如下:
console_init_action();
-> load_565rle_image(INIT_IMAGE_FILE) ;
-> unlink(fn);
函数中的宏在对应的头文件android/system/core/init/init.h中定义:
 #define INIT_IMAGE_FILE "/initlogo.rle" 
对于可读写型的文件系统而言,当第一次开机并显示logo后,上述unlink(fn)函数会将该logo删除,第二次开机时就不能再显示这一logo了。解决办法有两个,一是注释掉unlink(fn)函数,但是尽量不要修改源码。二是在out\target\product\xxxx\root目录下,拷贝initlogo.rle的副本,并命名为initlogo.rle.bak,直接用initlogo.rle.bak文件替换initlogo.rle也可以,不过原因还不清楚。

四、修改由Android显示的“android”文字开机动画


用winRAR 打开android\out\target\product\xxxx\system\framework目录下的framework-res.apk文件,用预显示的图片替换assets\images下相应的图片即可。
按上述方法能够改变开机logo,但是由于修改的是out目录下生成的文件,改动对android源码并没有影响,因此,若清除编译的目标文件并重新编译时,修改过的logo又被源码中的固有logo覆盖了。所以要修改源码中与logo有关的部分。具体做法是,修改/frameworks/base/core/res/assets/images/目录下的png图片,修改后再重新编译就依然是我们修改后的logo了。
与这一logo显示相关的源码在/frameworks/base/cmds/bootanimation/bootanimation.cp文件中,具体函数为

bool BootAnimation::android()。








你可能感兴趣的:(linux,android)