Android开机logo修改方法 【转】
本文转载自:http://blog.csdn.net/qq258711519/article/details/7766303
一体机平台开机logo修改方法
1:修改Kernel中的Logo:
若是要替换Kernel中的开机Logo,只需要把内核目录drivers/video/logo下的logo_android_1024_clut224.ppm文件替换掉即可(注意要保持名字一样,在IMT的SDK里没有这个ppm,默认选择了Standard 224-color Linux logo)。然后从新编译核心,把得到的zImage烧写到Nand Flash就可以了。其中制作logo_android_1024_clut224.ppm的方法如下:
1>、找一张分别率为1024x600、后缀为png的图片。然后放到linux系统下。
2>、制作ppm文件,使用命令:这里制作的是名字为linuxlogo.png的png图片。
# pngtopnm linuxlogo.png > linuxlogo.pnm
# pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm
# pnmtoplainpnm linuxlogo224.pnm > linuxlogo224.ppm
制作完成之后,把linuxlogo224.ppm的名字修改为logo_android_1024_clut224.ppm,然后替换核心中相应的文件。
如果没有安装png图片制作库的话,在制作ppm文件之前需要安装如下库文件。
netpbm libnetpbm10 libnetpbm10-dev
加载方法:
$sudo apt-get install netpbm libnetpbm10 libnetpbm10-dev
加载完成之后就可以制作了。
核心Logo在内核配置中的位置如下:
Device Drivers --->
Graphics support --->
[*] Bootup logo --->
其中[*] Standard 224-color Android logo(1024X600)为我们制作的开机Logo,
[ ] Standard 224-color Linux logo是Linux自带的开机Logo小企鹅。
2:修改android系统的开机Logo
Android系统的开机Logo是播放一个名字为bootanimation.zip的压缩文件,在系统中的位置为data/local/bootanimation.zip。可以在Android系统中直接替换。一般是在Android系统运行之后替换掉data/local/下的bootanimation.zip文件比较方便。
bootanimation.zip文件是zip压缩文件,压缩方式要求是存储压缩,包含一个文件和两个目录:
1.动画属性描述文件:desc.txt
2.第一阶段动画图片目录:part0
3.第二阶段动画图片目录:part1
desc.txt文件内容:
1024 600 30
p 1 0 part0
p 0 10 part1
desc.txt文件分析:
1024 600 30
宽 高 帧数
p 1 0 part0
标志符 循环次数 阶段切换间隔时间 对应目录名
p 0 10 part1
标志符 循环次数 阶段切换间隔时间 对应目录名
==================
标志符:
必须是: p
循环次数:
0 : 表示本阶段无限循环
阶段切换间隔时间:
单位是一个帧的持续时间,比如帧数是30,那么帧的持续时间就是1秒/30 = 33.3毫秒。
阶段切换间隔时间期间开机动画进程进入休眠,把CPU时间让给初始化系统使用。
也就是间隔长启动会快,但会影响动画效果。
part0和part1目录内包含的是两个动画的系列图片,图片为PNG格式。系列图片文件的加载刷新按文件名的名称排序。
bootanimation.zip文件的制作方法如下:
1)、先制作desc.txt、part0和part1三个文件,如下:
2)、把desc.txt、part0和part1三个文件制作为自拍格式的压缩文件,如下:
其中图示标出的1、2和3和地方必须如图所示。在点击确定之后就会生成一个bootanimation.zip文件,即时Android系统播放的logo文件。直接替换掉系统data/local/下的bootanimation.zip即可。
针对一体机平台,最简单的修改方法是把part2下的bootloop_frame_0001.png文件替换掉即可。
Android开机画面原理
Android系统开机画面分为下面三个阶段:
1. Linux 系统启动,出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片);
2. Android平台启动初始化,出现"A N D R I O D"文字字样画面;
3. Android平台图形系统启动,出现含闪动的ANDROID字样的动画图片(start)。
1、开机图片(Linux小企鹅) (Android 1.5及以上版本已经取消加载图片);
Linux Kernel引导启动后,加载该图片。
logo.c中定义nologo,在fb_find_logo(int depth)函数中根据nologo的值判断是否需要加载相应图片。(源码:kernel\drivers\video\logo)
代码如下:
static int nologo;
module_param(nologo, bool, 0);
MODULE_PARM_DESC(nologo, "Disables startup logo");
/* logo's are marked __initdata. Use __init_refok to tell
* modpost that it is intended that this function uses data
* marked __initdata.
*/
const struct linux_logo * __init_refok fb_find_logo(int depth)
{
const struct linux_logo *logo = NULL;
if (nologo)
return NULL;
......
}
相关代码:
/kernel/drivers/video/fbmem.c
/kernel/drivers/video/logo/logo.c
/kernel/drivers/video/logo/Kconfig
/kernel/include/linux/linux_logo.h
2、开机文字("A N D R I O D")
Android 系统启动后,init.c中main()调用load_565rle_image()函数读取/initlogo.rle(一张565 rle压缩的位图),如果读取成功,则在/dev/graphics/fb0显示Logo图片;如果读取失败,则将/dev/tty0设为TEXT模式,并打开/dev/tty0,输出文本“A N D R I O D”字样。
定义加载图片文件名称
#define INIT_IMAGE_FILE "/initlogo.rle"
int load_565rle_image( char *file_name );
#endif
init.c中main()加载/initlogo.rle文件。
static int console_init_action(int nargs, char **args)
{
int fd;
char tmp[PROP_VALUE_MAX];
if (console[0]) {
snprintf(tmp, sizeof(tmp), "/dev/%s", console);
console_name = strdup(tmp);
}
fd = open(console_name, O_RDWR);
if (fd >= 0)
have_console = 1;
close(fd);
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 ";
" R o c k c h i p R - B O X";
write(fd, msg, strlen(msg));
close(fd);
}
}
return 0;
}
相关代码:
/system/core/init/init.c
/system/core/init/init.h
/system/core/init/init.rc
/system/core/init/logo.c
/kernel/drivers/staging/msm/Logo.c
*.rle文件的制作步骤:
a. 使用GIMP或者Advanced Batch Converter软件,将图象转换为RAW格式;
b. 使用android自带的rgb2565工具,将RAW格式文件转换为RLE格式(如:rgb2565 -rle < initlogo.raw > initlogo.rle)。
说明:
在RK盒子上没有显示出R o c k c h i p R - B O X字样是因为linux内核配置的问题。
打开内核framebuffer控制台即可。
(1)make menuconifg后选择Device Drivers->Graphics support->Console display driver support->Framebuffer Console support
然后打开相关的几个配置选项即可。
3、开机动画(闪动的ANDROID字样的动画图片)
Android 1.6及以上版本:
init.c解析init.rc(其中定义服务:“service bootanim /system/bin/bootanimation”),bootanim服务由SurfaceFlinger.readyToRun()(property_set("ctl.start", "bootanim");)执行开机动画、bootFinished()(property_set("ctl.stop", "bootanim");)执行停止开机动画。
BootAnimation.h和BootAnimation.cpp文件放到了/frameworks/base/cmds/bootanimation目录下了,增加了一个入口文件bootanimation_main.cpp。Android.mk文件中可以看到,将开机动画从原来的SurfaceFlinger里提取出来了(,生成可执行文件:bootanimation。Android.mk代码如下:
//=============Android.mk======================
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
bootanimation_main.cpp \
BootAnimation.cpp
LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libui \
libskia \
libEGL \
libGLESv1_CM \
libgui
LOCAL_C_INCLUDES := \
$(call include-path-for, corecg graphics)
LOCAL_MODULE:= bootanimation
include $(BUILD_EXECUTABLE)
//==========================================
(1)adb shell后,可以直接运行“bootanimation”来重新看开机动画,它会一直处于动画状态,而不会停止。
(2)adb shell后,命令“setprop ctl.start bootanim”执行开机动画;命令“getprop ctl.start bootanim”停止开机动画。这两句命令分别对应SurfaceFlinger.cpp的两句语句:property_set("ctl.start", "bootanim");和property_set("ctl.stop", "bootanim");
相关文件:
/frameworks/base/cmds/bootanimation/BootAnimation.h
/frameworks/base/cmds/bootanimation/BootAnimation.cpp
/frameworks/base/cmds/bootanimation/bootanimation_main.cpp
/system/core/init/init.c
/system/core/rootdir/init.r
说明:
android开机动画的源码位于frameworks/base/cmds/bootanimation下,这个程序会将/data/local/bootanimation.zip或/system/media/bootanimation.zip里面的png或者jpg图片以动画的形式播放出来。
首先,我们先来分析一下源码:
frameworks/base/cmds/bootanimation/BootAnimation.cpp
首先看一下定义的常量:
#define USER_BOOTANIMATION_FILE "/data/local/bootanimation.zip"
#define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"
#define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/bootanimation-encrypted.zip"
BootAnimation::readyToRun()
进入一个if判断语句
if((encryptedAnimation &&
(access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK) ==0) &&
(mZip.open(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE) ==NO_ERROR)) ||
((access(USER_BOOTANIMATION_FILE, R_OK) ==0) &&
(mZip.open(USER_BOOTANIMATION_FILE) ==NO_ERROR)) ||
((access(SYSTEM_BOOTANIMATION_FILE, R_OK) ==0) &&
(mZip.open(SYSTEM_BOOTANIMATION_FILE) ==NO_ERROR))) {
mAndroidAnimation =false;
}
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中的内容
RK提供的源码里默认是没有那些个.zip动画的,所以总会跳到android字体闪动的画面
所以如果要用.zip的动画那么只要把做好的动画拷贝到编译好对应的目录下即可,如果想修改android闪动的那两张图片的话,最简单的方法是直接替换图片,那两张图片在./frameworks/base/core/res/assets/images 目录下,一张镂空的android图,一张发光效果,动画效果就是下面那张发光的效果图不断左右移动。
/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
Android开机logo修改方法 【转】的更多相关文章
- 高通平台开机LOGO修改LK(bootloader)下实现【转】
网络上已经有许多在kernel中修改开机Logo的文章,本文就LK下实现开机logo进行简述 需要用到ffmpeg工具,没有安装ffmpeg请参考这里: http://blog.csdn.net/re ...
- Linux 开机 logo 修改
从内核被解压到文件系统被挂载,我们看到的经典画面是一个小企鹅.如果嫌小企鹅枯燥,我们可以把它换掉. 1. 准备图片 这里需要的是 ppm 图片,所以,我们需要把常见格式给转换为 .ppm 才能使用.c ...
- android logo:内核、android开机动画【转】
本文转载自: 关键词:Android 开机logo 开机动画 initlogo.rle bootanimation desc.txt 平台信息:内核:linux2.6/linux3.0系统:a ...
- 八、启动linux内核并修改开机logo
1. 编译并烧写linux内核 1)先准备好内核源码包urbetter-linux2.6.28-v1.0.tgz,输入命令:tar -zxvf urbetter-linux2.6.28-v1.0.tg ...
- Android5.1开机LOGO与开机动画【转】
本文转载自:http://blog.csdn.net/u014770862/article/details/52624627 android5.1中,开机LOGO部分和之前版本的并不相同,主要区别在于 ...
- 安卓修改开机logo和开机动画的方法
第一种和第二种方法亲测可用,安卓版本是4.2和安卓5.1均可.第二种方法待验证 以下三种方法 Android 开机其实总共会出现3个画面: 1.第一个就是 linux 系统启动,出现Linux小企鹅画 ...
- Android 系统开机logo的修改【转】
本文转载自:http://blog.csdn.net/yandongqiangZHRJ/article/details/8585273 看到了好几个修改logo的博文,但是说的不是很清楚,在这里亲手送 ...
- 开机logo以及两种修改开机动画方法
Android开机画面总共有三屏 一.第一屏:开机logo 1.选张png格式的图片,在Linux任意下执行(安装工具): sudo apt-get install pnmtoplainpm 2.在所 ...
- Android MTK平台最完备的开机动画修改教程
修改手机的开机动画不是什么难事儿. 但修改一款很冷门的"山寨机",就不太好修改第一屏了. 手机是MTK的一款手机,虽然比较贵(价格超过三星Note3),但在我看来跟山寨机木有啥区别 ...
随机推荐
- 基于mybatis向oracle中插入数据的性能对比
数据库表结构: 逐条插入sql语句: <insert id="insert" parameterType="com.Structure"> INSE ...
- Eclipse Rap开发 异步刷新UI处理
1.Display.getCurrent()获取的是当前线程的display对象,如果当前在非UI线程中那么获取到的display对象为空: 一般Display.getCurrent() 用 ...
- DB120连接TTL--OpenWRT
DB120 TTL线连接 1.解压文件安装USB TTL PL2303HX 驱动 2.插上usb转ttl设备 3.串口调试 4.连接ttl线到db120 5.The END
- C# for 遍历 IPagedList
IPagedList<Doc> ss = Doclist.ToPagedList(page, pageSize); ;i<ss.Count;i++) { var yy = ss[i] ...
- eslint推荐编码规范和airbnb推荐编码规范
Eslint规范 for 循环禁止使用无限循环(这个非默认推荐) // bad for (var i = 0; i < 10; i--) { } for (var i = 10; i >= ...
- BZOJ 3531: [Sdoi2014]旅行 权值线段树 + 树链剖分
Description S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足 从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰 ...
- esp32(M5STACK)在线体验(Ubuntu)
我们往m5stack烧录的固件是可以在线编程的 具体使用方法可以参考 https://github.com/m5stack/M5Cloud/blob/master/README_CN.md ...
- [POJ2404]Jogging Trails
我太弱了. 我们可以知道一个结论就是对于一个图的话假如所有点的度数都是偶数,那么只需要走一波欧拉回路. 所以我们就把奇点补成偶点. 将两个奇点补充到偶点的最佳方法是选择任意两个奇点连最短路径为权的边 ...
- Codeforces 851B/C
B. Arpa and an exam about geometry 传送门:http://codeforces.com/contest/851/problem/B 本题是一个平面几何问题. 平面上有 ...
- 2、在1.VMware虚拟机上安装ubantu系统
1.新建新的虚拟机系统 2.使用自定义高级安装 3.选择下一步操作 4.选择稍后安装 4.因为我们要安装的是Linux的发行版本ubuntu,所以这里选择Linux(L),版本是Ubuntu 64位, ...