一体机平台开机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修改方法相关推荐

  1. Android开机logo修改方法 【转】

    本文转载自:http://blog.csdn.net/qq258711519/article/details/7766303 一体机平台开机logo修改方法 1:修改Kernel中的Logo: 若是要 ...

  2. android 刷机动画,Android开机动画修改方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Android开机动画有两种修改方法,android 2.0及之后,使用bootanimation程序显示开机画面,如需修改开机画面,不用修改代码,只需按 ...

  3. android 开机动画竖屏,Android 5.0 开机横屏修改方法

    如果理解了Android的设计的原理, 其实这个修改原理十分简单, 比一些网上流出来的粗暴的修改方式既美观又实用. 修改分为三部分: 1: 上层(Java)修改 既然设计到屏幕的修改, 肯定想到了直接 ...

  4. 基于Linux2.6内核的嵌入式手持设备开机LOGO修改

    硬件平台:MX25[其它平台原理相同] 系统平台:Linux2.6.31 默认开机LOGO会在液晶屏的左上脚显示一只小企鹅,分辨率为80*80,具体在 kernel/drivers/video/log ...

  5. 去掉linux开关机图片,在Deepin Linux系统下去掉NVIDIA开机Logo的方法

    要实现在deepin Linux或其他Linux系统下去掉NVIDIA开机Logo非常的简单,只需要两步就可以了,可以运用命令操作,也可手动操作.安装NVIDIA请参考在deepin系统中安装英伟达N ...

  6. Android 开机logo动画

    Android 开机会出现3个画面: 1. Linux 系统启动,出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片): 2. Android平台启动初始化,出 ...

  7. [RK3568 Android11] 教程之制作和替换android开机logo图片

    目录 前言 一.Android logo说明 二.Android logo打包方法 三.测试方法 四.bootanimation.zip添加到SDK源码中

  8. 地表最强之Android开机Logo动态替换(附100余款车商原厂高清logo)

    前言 现在很多车载大屏都是基于Android系统,其中都会有一个开机 logo 替换程序,任你选择各大车商 logo 替换,一开机就能查看效果. 一直对这块很感兴趣,研究了发现 MTK 平台可以通过 ...

  9. x390自定义开机logo界面方法

    1.x390要更换开机那个联想的红红的.丑丑的开机标志,目前最方便的方法就是BIOS的更新,注意不要被BIOS的更新这个概念给吓到了,其实就是安装程序这么简单,好啦,前提就说这么多了. 2.先去联想官 ...

最新文章

  1. 测序数据学习笔记:bcl2fastq 安装
  2. voip 音频采集时间_数字音频基础------从PCM说起
  3. zsh配置其显示当前文件路径
  4. javaweb入门笔记(4)-request和response
  5. phpcms:八、show.html
  6. 前端学习(3251):样式的模块化
  7. C++程序的单元测试
  8. 矩阵的逆、伪逆、左右逆,最小二乘,投影矩阵
  9. 创朵计算机维修,创建第一个计算机监控软件服务
  10. 001机器学习深度学习简介
  11. 题解 AT934 【完全数】
  12. scheme 微博_可用App URL Schemes
  13. 游戏运营的工作中是做什么
  14. 头歌-自己动手画CPU(第五关)-寄存器文件设计-Logisim
  15. 苹果app退款_苹果app退款流程:App Store应用如何申请iOS退款教程
  16. 带你用 Python 实现自动化群控(入门篇)
  17. BT1120中的串行传输
  18. 转载--成功应聘Intel的真实经历
  19. tensorflow环境安装(及tensorflow虚拟环境中配置jupyter)
  20. 构件组装-总结与展望

热门文章

  1. 亿能 性能测试课程 2013年度 公开课 深圳站
  2. 计算几何常用算法的理论基础【转】
  3. UA MATH566 统计理论 位置-尺度参数族
  4. 把tomcat服务器配置为windows服务的方法
  5. Win32 API 枚举打印机
  6. java web 项目在tomcat上显示空白页的解决
  7. 创建和准备Oracle样例数据库
  8. Hadoop 故障整理
  9. ssm多数据源的操作
  10. php 变量的8类类型