您的位置:首页 > 运维架构 > Linux

修改linux/Android启动logo

2013-11-18 11:30 387 查看
[-]

一修改uboot显示开机logo
二修改由kernel显示的开机logo

安装pngtopnm
制作logo图片
制作ppm格式的图片
拷贝文件到相应目录
内核的配置

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

制作要显示的图片
将图片转换为raw格式
将raw格式转化为rle文件
将initlogorle拷贝到文件系统中
特别说明

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

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

转载请注明出处:/article/10553939.html

一、修改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()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: