1. 如果Uboot中LCD可以显示,在Uboot的可以显示第一帧图片,不过这个跟Uboot具体实现有关,各个厂家做法不一样,这里就不做讨论了
2. Kernel启动第二帧图片,各个厂家做法不一样,一下是RK的做法:
1). 制作图片,RK使用的是.ppm格式的图片
pngtopnm logo.png > logo.pnm
(pngtopnm为命令,logo.png为原图片名字,logo.pnm为重命名后的图片名字,以下的操作步骤类似)
pnmquant 224 logo.pnm > logo224.pnm //转成244色
pnmtoplainpnm logo224.pnm > logo224.ppm
2). 将生成的logo224.ppm图片放入kernel/drivers/video/logo中。
3). 进入kernel/drivers/video/logo/Kconfig创建新分支,如
config LOGO_LINUX_224
bool "Standard 224-color Linux logo"
default n
4). 进入kernel/drivers/video/logo/Makefile,创建新分支,如
obj-$(LOGO_LINUX_224) += logo224.o
5). 进入kernel/drivers/video/logo/logo.c, 创建新分支,如
#ifdef LOGO_LINUX_224
logo = &logo224
#endif
6). 进入kernel/include/linux/linux_logo.h,,添加新资源的引用,如
extern const struct linux_logo logo224
7). 进入kernel/arch/arm/configs,拷贝rk30_hotdog_ti_defconfig,重命名新的分支名称,如rk30_hotdog_ti_xxx_deconfig,进入,将新的分支的宏控制设为y,并将旧的宏控制去掉,如增加
CONFIG_LOGO_LINUX_224=y
去掉默认的CONFIG_LOGO_LINUX_CLUT_224=y
OK
static int console_init_action(int nargs, char **args)
{
...
if( load_565rle_image(INIT_IMAGE_FILE) ) {
fd = open("/dev/tty0", O_WRONLY);
if (fd >= 0) {
const char *msg;
msg = "\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n" // console is 40 cols x 30 lines
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
" A N D R O I D ";
write(fd, msg, strlen(msg));
close(fd);
}
}
}
根据system\core\init\Init.h声明定义的:
#define INIT_IMAGE_FILE "/initlogo.rle"
可知此时系统读取的是initlogo.rle(一张565 rle 压缩的图片),如果成功则在/dev/graphics/fb0显示Logo,如果失败则将/dev/tty0设为TEXT模式并打开/dev/tty0,输出文本“ANDROID”字样。
修改步骤:1).处理一张rle的图片,使用linux下的ImageMagick自带的convert命令,进行raw格式转换,命令为:
convert -depth 8 android_logo.png rgb:android_logo.raw
如果没有,用命令安装
sudo apt-get install imagemagick使用android编译好的工具rgb2565(out/host/linux-86/bin),命令 rgb2565 -rle <initlogo.raw> initlogo.rle。
2).将这张图片打包到ramdisk.img 的根目录中。个人方法:在code下加入了vender文件夹,将initlogo.rle放入此文件夹,在generic.mk中加入
PRODUCT_COPY_FILES := \
vendor/initloge.rle:root/initloge.rle
3).编译源码即可。
4. Android登陆画面
Android 的系统登录动画类似于Windows系统的滚动条,是由前景和背景两张PNG图片组成,这两张图片存在于/system/framework/framework-res.apk文件当中。前景图片(android-logo-mask.png)上的Android文字部分镂空,背景图片(android-logo-shine.png)则是简单的纹理。系统登录时,前景图片在最上层显示,程序代码控制背景图片连续滚动,透过前景图片文字镂空部分滚动显示背景纹理,从而实现动画效果。代码地址已给出,大家自己修改吧。不可随意修改图片,像素大小要一样。
相关代码:
\frameworks\base\cmds\bootanimation\BootAnimation.h
\frameworks\base\cmds\bootanimation\BootAnimation.cpp
\frameworks\base\core\res\assets\images\android-logo-mask.png
Android默认的前景图片,文字部分镂空,大小256×64
\frameworks\base\core\res\assets\images\android-logo-shine.png
Android默认的背景图片,有动感效果,大小512×64
以上内容大多数为搜集内容