2023年6月21日发(作者:)
Android开机logo修改⽅法【转】⼀体机平台开机logo修改⽅法
1:修改Kernel中的Logo: 若是要替换Kernel中的开机Logo,只需要把内核⽬录drivers/video/logo下的logo_android_1024_⽂件替换掉即可(注意要保持名字⼀样,在IMT的SDK⾥没有这个ppm,默认选择了Standard 224-color logo)。然后从新编译核⼼,把得到的zImage烧写到NandFlash就可以了。其中制作logo_android_1024_的⽅法如下: 1>、找⼀张分别率为1024x600、后缀为png的图⽚。然后放到系统下。 2>、制作ppm⽂件,使⽤命令:这⾥制作的是名字为的png图⽚。 # pngtopnm > # pnmquant 224 > # pnmtoplainpnm > 制作完成之后,把的名字修改为logo_android_1024_,然后替换核⼼中相应的⽂件。 如果没有安装png图⽚制作库的话,在制作ppm⽂件之前需要安装如下库⽂件。 netpbm libnetpbm10 libnetpbm10-dev 加载⽅法: $sudo apt-get install netpbm libnetpbm10 libnetpbm10-dev 加载完成之后就可以制作了。核⼼Logo在内核配置中的位置如下:Device Drivers ---> Graphics support ---> [*] Bootup logo --->
其中[*] Standard 224-color logo(1024X600)为我们制作的开机Logo,[ ] Standard 224-color Linux logo是Linux⾃带的开机Logo⼩企鹅。
2:修改系统的开机LogoAndroid系统的开机Logo是播放⼀个名字为的压缩⽂件,在系统中的位置为data/local/。可以在Android系统中直接替换。⼀般是在Android系统运⾏之后替换掉data/local/下的⽂件⽐较⽅便。
⽂件是zip压缩⽂件,压缩⽅式要求是存储压缩,包含⼀个⽂件和两个⽬录: 1.动画属性描述⽂件: 2.第⼀阶段动画图⽚⽬录:part0 3.第⼆阶段动画图⽚⽬录:part1
⽂件内容: 1024 600 30 p 1 0 part0 p 0 10 part1
⽂件分析: 1024 600 30 宽 ⾼ 帧数 p 1 0 part0 标志符 循环次数 阶段切换间隔时间 对应⽬录名 p 0 10 part1 标志符 循环次数 阶段切换间隔时间 对应⽬录名
================== 标志符: 必须是: p
循环次数: 0 : 表⽰本阶段⽆限循环
阶段切换间隔时间: 单位是⼀个帧的持续时间,⽐如帧数是30,那么帧的持续时间就是1秒/30 = 33.3毫秒。 阶段切换间隔时间期间开机动画进程进⼊休眠,把CPU时间让给初始化系统使⽤。 也就是间隔长启动会快,但会影响动画效果。
part0和part1⽬录内包含的是两个动画的系列图⽚,图⽚为PNG格式。系列图⽚⽂件的加载刷新按⽂件名的名称排序。
⽂件的制作⽅法如下: 1)、先制作、part0和part1三个⽂件,如下:
2)、把、part0和part1三个⽂件制作为⾃拍格式的压缩⽂件,如下:
其中图⽰标出的1、2和3和地⽅必须如图所⽰。在点击确定之后就会⽣成⼀个⽂件,即时Android系统播放的logo⽂件。直接替换掉系统data/local/下的即可。
针对⼀体机平台,最简单的修改⽅法是把part2下的bootloop_frame_⽂件替换掉即可。
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的值判断是否需要加载相应图⽚。(源码:kerneldriversvideologo)代码如下:
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.h2、开机⽂字("A N D R I O D")Android 系统启动后,init.c中main()调⽤load_565rle_image()函数读取/(⼀张565 rle压缩的位图),如果读取成功,则在/dev/graphics/fb0显⽰Logo图⽚;如果读取失败,则将/dev/tty0设为TEXT模式,并打开/dev/tty0,输出⽂本“A N D R I O D”字样。定义加载图⽚⽂件名称#define INIT_IMAGE_FILE "/"
int load_565rle_image( char *file_name );
#endifinit.c中main()加载/⽂件。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//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 < > )。说明:在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解析(其中定义服务:“service bootanim /system/bin/bootanimation”),bootanim服务由oRun()(property_set("", "bootanim");)执⾏开机动画、bootFinished()(property_set("", "bootanim");)执⾏停⽌开机动画。BootAnimation.h和⽂件放到了/frameworks/base/cmds/bootanimation⽬录下了,增加了⼀个⼊⼝⽂件bootanimation_。⽂件中可以看到,将开机动画从原来的SurfaceFlinger⾥提取出来了(,⽣成可执⾏⽂件:bootanimation。代码如下: //===================================
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_SRC_FILES:= bootanimation_
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 bootanim”执⾏开机动画;命令“getprop bootanim”停⽌开机动画。这两句命令分别对应的两句语句:property_set("", "bootanim");和property_set("", "bootanim");相关⽂件:
/frameworks/base/cmds/bootanimation/BootAnimation.h
/frameworks/base/cmds/bootanimation/
/frameworks/base/cmds/bootanimation/bootanimation_
/system/core/init/init.c
/system/core/rootdir/init.r说明:android开机动画的源码位于frameworks/base/cmds/bootanimation下,这个程序会将/data/local/或/system/media/⾥⾯的png或者jpg图⽚以动画的形式播放出来。⾸先,我们先来分析⼀下源码:frameworks/base/cmds/bootanimation/⾸先看⼀下定义的常量:#define USER_BOOTANIMATION_FILE "/data/local/"
#define SYSTEM_BOOTANIMATION_FILE "/system/media/"#define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/"BootAnimation::readyToRun()进⼊⼀个if判断语句if((encryptedAnimation && (access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK) ==0) && ((SYSTEM_ENCRYPTED_BOOTANIMATION_FILE) ==NO_ERROR)) ||
((access(USER_BOOTANIMATION_FILE, R_OK) ==0) && ((USER_BOOTANIMATION_FILE) ==NO_ERROR)) ||
((access(SYSTEM_BOOTANIMATION_FILE, R_OK) ==0) && ((SYSTEM_BOOTANIMATION_FILE) ==NO_ERROR))) { mAndroidAnimation =false; }BootAnimation::threadLoop()if(mAndroidAnimation) { r =Android(); //执⾏android字体闪动的图⽚ } else{ r =movie(); //执⾏中提供的动画图⽚ }==> BootAnimation::Android()会加载"images/"和"images/"==> BootAnimation::movie()会加载中的内容RK提供的源码⾥默认是没有那些个.zip动画的,所以总会跳到android字体闪动的画⾯所以如果要⽤.zip的动画那么只要把做好的动画拷贝到编译好对应的⽬录下即可,如果想修改android闪动的那两张图⽚的话,最简单的⽅法是直接替换图⽚,那两张图⽚在./frameworks/base/core/res/assets/images ⽬录下,⼀张镂空的android图,⼀张发光效果,动画效果就是下⾯那张发光的效果图不断左右移动。
/frameworks/base/core/res/assets/images/roid默认的前景图⽚,⽂字部分镂空,⼤⼩256×64/frameworks/base/core/res/assets/images/roid默认的背景图⽚,有动感效果,⼤⼩512×64
2023年6月21日发(作者:)
Android开机logo修改⽅法【转】⼀体机平台开机logo修改⽅法
1:修改Kernel中的Logo: 若是要替换Kernel中的开机Logo,只需要把内核⽬录drivers/video/logo下的logo_android_1024_⽂件替换掉即可(注意要保持名字⼀样,在IMT的SDK⾥没有这个ppm,默认选择了Standard 224-color logo)。然后从新编译核⼼,把得到的zImage烧写到NandFlash就可以了。其中制作logo_android_1024_的⽅法如下: 1>、找⼀张分别率为1024x600、后缀为png的图⽚。然后放到系统下。 2>、制作ppm⽂件,使⽤命令:这⾥制作的是名字为的png图⽚。 # pngtopnm > # pnmquant 224 > # pnmtoplainpnm > 制作完成之后,把的名字修改为logo_android_1024_,然后替换核⼼中相应的⽂件。 如果没有安装png图⽚制作库的话,在制作ppm⽂件之前需要安装如下库⽂件。 netpbm libnetpbm10 libnetpbm10-dev 加载⽅法: $sudo apt-get install netpbm libnetpbm10 libnetpbm10-dev 加载完成之后就可以制作了。核⼼Logo在内核配置中的位置如下:Device Drivers ---> Graphics support ---> [*] Bootup logo --->
其中[*] Standard 224-color logo(1024X600)为我们制作的开机Logo,[ ] Standard 224-color Linux logo是Linux⾃带的开机Logo⼩企鹅。
2:修改系统的开机LogoAndroid系统的开机Logo是播放⼀个名字为的压缩⽂件,在系统中的位置为data/local/。可以在Android系统中直接替换。⼀般是在Android系统运⾏之后替换掉data/local/下的⽂件⽐较⽅便。
⽂件是zip压缩⽂件,压缩⽅式要求是存储压缩,包含⼀个⽂件和两个⽬录: 1.动画属性描述⽂件: 2.第⼀阶段动画图⽚⽬录:part0 3.第⼆阶段动画图⽚⽬录:part1
⽂件内容: 1024 600 30 p 1 0 part0 p 0 10 part1
⽂件分析: 1024 600 30 宽 ⾼ 帧数 p 1 0 part0 标志符 循环次数 阶段切换间隔时间 对应⽬录名 p 0 10 part1 标志符 循环次数 阶段切换间隔时间 对应⽬录名
================== 标志符: 必须是: p
循环次数: 0 : 表⽰本阶段⽆限循环
阶段切换间隔时间: 单位是⼀个帧的持续时间,⽐如帧数是30,那么帧的持续时间就是1秒/30 = 33.3毫秒。 阶段切换间隔时间期间开机动画进程进⼊休眠,把CPU时间让给初始化系统使⽤。 也就是间隔长启动会快,但会影响动画效果。
part0和part1⽬录内包含的是两个动画的系列图⽚,图⽚为PNG格式。系列图⽚⽂件的加载刷新按⽂件名的名称排序。
⽂件的制作⽅法如下: 1)、先制作、part0和part1三个⽂件,如下:
2)、把、part0和part1三个⽂件制作为⾃拍格式的压缩⽂件,如下:
其中图⽰标出的1、2和3和地⽅必须如图所⽰。在点击确定之后就会⽣成⼀个⽂件,即时Android系统播放的logo⽂件。直接替换掉系统data/local/下的即可。
针对⼀体机平台,最简单的修改⽅法是把part2下的bootloop_frame_⽂件替换掉即可。
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的值判断是否需要加载相应图⽚。(源码:kerneldriversvideologo)代码如下:
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.h2、开机⽂字("A N D R I O D")Android 系统启动后,init.c中main()调⽤load_565rle_image()函数读取/(⼀张565 rle压缩的位图),如果读取成功,则在/dev/graphics/fb0显⽰Logo图⽚;如果读取失败,则将/dev/tty0设为TEXT模式,并打开/dev/tty0,输出⽂本“A N D R I O D”字样。定义加载图⽚⽂件名称#define INIT_IMAGE_FILE "/"
int load_565rle_image( char *file_name );
#endifinit.c中main()加载/⽂件。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//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 < > )。说明:在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解析(其中定义服务:“service bootanim /system/bin/bootanimation”),bootanim服务由oRun()(property_set("", "bootanim");)执⾏开机动画、bootFinished()(property_set("", "bootanim");)执⾏停⽌开机动画。BootAnimation.h和⽂件放到了/frameworks/base/cmds/bootanimation⽬录下了,增加了⼀个⼊⼝⽂件bootanimation_。⽂件中可以看到,将开机动画从原来的SurfaceFlinger⾥提取出来了(,⽣成可执⾏⽂件:bootanimation。代码如下: //===================================
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_SRC_FILES:= bootanimation_
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 bootanim”执⾏开机动画;命令“getprop bootanim”停⽌开机动画。这两句命令分别对应的两句语句:property_set("", "bootanim");和property_set("", "bootanim");相关⽂件:
/frameworks/base/cmds/bootanimation/BootAnimation.h
/frameworks/base/cmds/bootanimation/
/frameworks/base/cmds/bootanimation/bootanimation_
/system/core/init/init.c
/system/core/rootdir/init.r说明:android开机动画的源码位于frameworks/base/cmds/bootanimation下,这个程序会将/data/local/或/system/media/⾥⾯的png或者jpg图⽚以动画的形式播放出来。⾸先,我们先来分析⼀下源码:frameworks/base/cmds/bootanimation/⾸先看⼀下定义的常量:#define USER_BOOTANIMATION_FILE "/data/local/"
#define SYSTEM_BOOTANIMATION_FILE "/system/media/"#define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/"BootAnimation::readyToRun()进⼊⼀个if判断语句if((encryptedAnimation && (access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK) ==0) && ((SYSTEM_ENCRYPTED_BOOTANIMATION_FILE) ==NO_ERROR)) ||
((access(USER_BOOTANIMATION_FILE, R_OK) ==0) && ((USER_BOOTANIMATION_FILE) ==NO_ERROR)) ||
((access(SYSTEM_BOOTANIMATION_FILE, R_OK) ==0) && ((SYSTEM_BOOTANIMATION_FILE) ==NO_ERROR))) { mAndroidAnimation =false; }BootAnimation::threadLoop()if(mAndroidAnimation) { r =Android(); //执⾏android字体闪动的图⽚ } else{ r =movie(); //执⾏中提供的动画图⽚ }==> BootAnimation::Android()会加载"images/"和"images/"==> BootAnimation::movie()会加载中的内容RK提供的源码⾥默认是没有那些个.zip动画的,所以总会跳到android字体闪动的画⾯所以如果要⽤.zip的动画那么只要把做好的动画拷贝到编译好对应的⽬录下即可,如果想修改android闪动的那两张图⽚的话,最简单的⽅法是直接替换图⽚,那两张图⽚在./frameworks/base/core/res/assets/images ⽬录下,⼀张镂空的android图,⼀张发光效果,动画效果就是下⾯那张发光的效果图不断左右移动。
/frameworks/base/core/res/assets/images/roid默认的前景图⽚,⽂字部分镂空,⼤⼩256×64/frameworks/base/core/res/assets/images/roid默认的背景图⽚,有动感效果,⼤⼩512×64
发布评论