分类: Java
2011-12-16 13:05:38
目前的LK(little kernel)中,没有统一的logo画面接口,一般在平台lcd_init后,会往framebuffer copy一幅图画内容,作为logo的初始化,已我使用的平台tcc8900, android2.1 为例:
./platform/tcc_shared/include/lcd/logo.h #以一个char型数组的形式,存放了待显示界面内容的RGB565内容。
跟换这个文件,就可以获取更换画面显示内容的效果。因此,我们要做的是:
一张选定的适合平台分辨率的图片 ---> RGB565数组
网上有很多类似的转换工具,多为bmp图片转换到rgb565数据,可以胜任上面的工作。
Kernel:
linux kernel 中对于logo的支持较为完整。首先,通过配置kernel来开启对logo显示的支持:
make menuconfig
Device Drivers --->
Graphics support --->
Bootup logo --->
standrad black and white Linux logo --->
standrad 16-color Linux logo --->
standrad 224-color Linux logo --->
可以选择 black and white or 16-color or 224-color 中的任意一种。下面就以 224-color 为选定配置,把一幅logo.bmp文件制作成启动logo(debian base pc):
编译生成的linux kernel 在启动过程中,就会显示logo.bmp中的内容。
Android:
当linux kernel启动完成后,在android启动init.rc中的服务时,会运行/system/bin/bootanimation来读取动画图片。和bootanimation相关的源代码有
frameworks/base/cmds/bootanimation/bootanimation_main.cpp
frameworks/base/cmds/bootanimation/BootAnimation.cpp
通过阅读BootAnimation.cpp中BootAnimation的实现,我们可以得到这些信息:
所以,如果我们想更换开机动画, 需要制作一个bootanimation.zip动画包,并复制到/data/local 或者 /system/media/ 目录下, 一个最简单的bootanimation.zip至少包括3部分。
desc.txt 文件内容解析, 一个简单的desc.txt文件实例如下:
320 480 30
p 1 0 part0
p 0 0 part1
其中:
当完成动画包之后, 通过下面命令打包:
zip -0 -r ../bootanimation.zip ./desc.txt ./part0 ./part1
资源:
图片格式转换工具:
BMP -> RGB565: