Chinaunix首页 | 论坛 | 博客
  • 博客访问: 526223
  • 博文数量: 107
  • 博客积分: 927
  • 博客等级: 大尉
  • 技术积分: 865
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-13 17:50
文章分类

全部博文(107)

文章存档

2014年(2)

2013年(13)

2012年(16)

2011年(76)

分类: Java

2011-12-16 13:05:38

Bootloader :

目前的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):

  1. apt-get install netpbm
  2. bmptoppm logo.bmp > tmp1.ppm
  3. ppmquant 224 tmp1.ppm > tmp2.ppm
  4. pnmnoraw tmp2.ppm > logo.ppm
  5. rm mylinux/driver/video/logo/logo_linux_clut224.*
  6. cp logo.ppm mylinux/drivers/video/logo/logo_linux_clut224.ppm
  7. make

编译生成的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的实现,我们可以得到这些信息:

  • 程序会优先查找/data/local/bootanimation.zip动画包, 没找到则查找动画包/system/media/bootanimation.zip。
  • 如果始终没有找到动画包,则播放默认动画 android-logo-mask.png 和 android-logo-shine.png
  • 如果找到动画包,则解开动画包,并查找文件 desc.txt, 该文件描述了如何播放动画包。

所以,如果我们想更换开机动画, 需要制作一个bootanimation.zip动画包,并复制到/data/local 或者 /system/media/ 目录下, 一个最简单的bootanimation.zip至少包括3部分。

  1. desc.txt    #播放动画的描述文件
  2. part0/       #背景图片集合
  3. part1/       #前景图片集合

desc.txt 文件内容解析, 一个简单的desc.txt文件实例如下:

320 480 30

p  1  0  part0

p  0  0  part1

其中:

  • 320 480     分别为屏幕的 宽度 和 长度, 合起来也就是屏幕的分辨率
  • 30              为显示帧数, 即每秒显示多少幅画面
  • p                为标记字符, 不可更改,代码通过此标记识别该行的参数
  • 1                循环次数, 1表示循环1次, 0表示无限循环
  • 0                两次循环之间间隔的帧数, 0表示2次循环之间间隔0帧
  • part0          目录名,目录中应含有所配置分辨率大小的png图片

当完成动画包之后, 通过下面命令打包:

zip -0 -r ../bootanimation.zip ./desc.txt ./part0 ./part1 

 

资源:

图片格式转换工具:

BMP -> RGB565:

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