Android 开机会出现3个画面:
(一)底层Linux内核系统启动,出现Linux小企鹅画面(reboot);
(二)Android平台启动初始化,出现"A N D R I O D"文字字样画面;
(三)Android平台上层图形系统启动,出现含闪动的ANDROID字样的动画图片(start)。
一、 底层Linux内核系统启动logo(小企鹅)修改
1、分析过程:
(1)先看一下Bootup logo选项的帮助文档,其启动LOGO是如何配置的。
到Android内核源码根目录下执行make menuconfig,按如下层次依次进入:
->DeviceDrivers
->Graphicssupport
-> [*] Bootup logo --->
选择help查看详细信息:
CONFIG_LOGO:
Enable andselect frame buffer bootup logos.
Symbol: LOGO[=y]
Prompt: Bootuplogo
Defined at drivers/video/logo/Kconfig: 5
Depends on: HAS_IOMEM && (FB||SGI_NEWPORT_CONSOLE)
Location:
->DeviceDrivers
->Graphicssupport
由此可知:drivers/video/logo/Kconfig:5 由此句话,我们知道,启动LOGO的图片的设置是在这个文件中。
(2)再看那张启动图片(小企鹅)logo_linux_clut224.ppm是怎么配置的:
->DeviceDrivers
->Graphicssupport
-> [*] Bootup logo --->
->[*] Standard 224-color Linux logo
选择help查看详细信息:
Symbol: LOGO_LINUX_CLUT224 [=y]
Prompt: Standard224-colorLinux logo
Defined at drivers/video/logo/Kconfig: 26
Depends on: HAS_IOMEM && (FB||SGI_NEWPORT_CONSOLE) && LOGO
Location:
->DeviceDrivers
->Graphicssupport
->Bootuplogo (LOGO [=y])
由此可知:在~/work/android-2.6.29-samsung/drivers/video/logo目录下的Kconfig中有:
26 config LOGO_LINUX_CLUT224
27 bool"Standard224-colorLinux logo"
28 default y
——即选择了logo_linux_clut224这张图片作为启动画面的logo。
若我们想加一个图片,应该在Kconfig中添加相应的配置选项,同时,要在logo 目录下有一个相应的.ppm 格式的图片文件(一个.ppm图片文件、一个.c的文件、一个.h的文件)... ...
这种情况我先不给大家介绍,我们直接用一个.ppm格式的新的图片文件覆盖原来的开机logo 图片文件,重新编译内核即可,相关过程如下。
2、修改过程:
(1)首先找一张符合LCD分辨率的png图片(logo.png),(听说bmp格式的也可以,只是格式转换的命令不同),然后按下面的命令做格式转换:
pngtopnm logo.png > my_linux_logo.pnm(需要下载工具sudoapt-get install netpbm)
pnmquant 224 my_linux_logo.pnm > my_linux_logo224.pnm
pnmtoplainpnm my_linux_logo224.pnm > my_linux_logo.ppm
(2)将ppm图片文件拷贝到logo 目录下,将原开机启动图片文件(小企鹅)做下备份:
cp logo_linux_clut224.ppm logo_linux_clut224_copy.ppm
(3)将新图片文件替换原来的图片文件:
mv my_linux_logo.ppm logo_linux_clut224.ppm
(4)然后make menuconfig,选中Standard224-colorLinuxlogo:
->DeviceDrivers
->Graphicssupport
-> [*] Bootup logo --->
->[*] Standard 224-color Linux logo
(5)设置图片居中显示:
修改drivers/video/fbmem.c
/*modified bycreatory*/
// image.dx=0;
// image.dy=y;
image.dx=(info->var.xres/2)-(logo->width/2);
image.dy=(info->var.yres/2)-(logo->height/2);
在drivers/video/console/fbcon.c文件中的
logo_height=fb_prepare_logo(info,ops->rotate);
下面加入
logo_height +=(info->var.yres/2)-(logo_height/2);
最后make zImage,将内核镜像烧到开发板中,即可大功告成!!!
二、 Android平台启动初始化"AN D R I O D"字样修改
在启动代码system/core/init/init.c中将下面的代码修改红色字体部分,即可在开机时显示所修改的内容,一般为了开机的简约,这段代码通常被屏蔽掉。
if(load_565rle_image(INIT_IMAGE_FILE) ) {
fd =open("/dev/tty0", O_WRONLY);
if (fd >=0) {
constchar *msg;
msg= "\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n" // console is 40cols x 30 lines
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
" A N D R O I D ";//需要修改的地方
write(fd, msg, strlen(msg));
close(fd);
}
}
重新进行源码的编译,启动Android系统即可。
三、Android图形系统启动,动画闪动ANDROID修改
1、主要过程分析:
BootAnimation::readyToRun()
==> 程序会尝试打开/data/local/bootanimation.zip和/system/media/bootanimation.zip文件如果2个文件都不存在,那么mAndroidAnimation将为true:
mAndroidAnimation = false;
status_t err = mZip.open("/data/local/bootanimation.zip");
if (err != NO_ERROR) {
err = mZip.open("/system/media/bootanimation.zip");
if (err != NO_ERROR) {
mAndroidAnimation = true;
}
}
于是最终将在下面threadLoop()函数中
BootAnimation::threadLoop()
if (mAndroidAnimation) {
r = Android(); // 执行android字体闪动的图片
} else {
r = movie(); // 执行bootanimation.zip中提供的动画图片
}
==> BootAnimation::Android()会加载"images/android-logo-mask.png"和"images/android-logo-shine.png"
==> BootAnimation::movie()会加载bootanimation.zip中的内容
2、添加方法:
在/data/local和/system/media目录下添加自己的动画bootanimation.zip文件(同时也可以添加相应的开机音乐 bootanimation.MP3),这样在系统启动时就会播放自己的开机动画和播放音乐。