更改高通平台开机logo和开机动画以及fastboot界面显示

开机logo

首先修改开机logo要从哪里入手呢?先看看源码

void display_image_on_screen()
 2 {
 3     struct fbimage default_fbimg, *fbimg;
 4     bool flag = true;
 5 
 6     fbcon_clear();
 7     fbimg = fetch_image_from_partition();      //从splash镜像分区抓取图片
 8     if(fbimg){
 9         dprintf(CRITICAL, "zbzhuang### ->fetch_image_from_partition\n");
10     }
11 
12     if(!fbimg) {                              //如果splash.img分区的内容不存在或者被擦除则从splash.h头文件从获取要显示图像的数组
13         dprintf(CRITICAL, "zbzhuang### ->not fetch_image_from_partition\n");
14         flag = false;
15         fbimg = &default_fbimg;
16         fbimg->header.width = SPLASH_IMAGE_HEIGHT;
17         fbimg->header.height = SPLASH_IMAGE_WIDTH;
18 #if DISPLAY_TYPE_MIPI
19         fbimg->image = (unsigned char *)imageBuffer_rgb888;
20 #else
21         fbimg->image = (unsigned char *)imageBuffer;
22 #endif
23     }
24 
25     fbcon_putImage(fbimg, flag);
26 }

由源码可以知道修改开机logo有两种方式:

方法一:利用工具根据图像生成splash.img镜像之后,使用fastboot重新刷splash.img分区。

方法二:利用工具将图片重新生成splash.h头文件的数据,替换相应的头文件就OK

通过验证可以知道方法一适用用于高分辨率的图片,也能适用于小分辨率的图片,而方法二只适用于小分辨率的图片,所有基本上不使用方法二。

方法一
利用工具根据图像生成splash.img镜像之后,使用fastboot重新刷splash.img分区。

现在基本上平板,手机都是高清显示屏了,所以准备一张1920*1080的图片和生成splash.img镜像的脚本工具—>logo_gen.py。

脚本路径device\qcom\common\display\logo\logo_gen.py

(1)先把图片和脚本文件放在同一目录。

(2) sudo apt-get install python-imaging

安装python成功后运行如下脚本:(现在基本的linux系统都已经装好了,可以直接用)

(3) python ./logo_gen.py snapdragon.png

这样就可在当前目录下生成splash.img。

烧写 splash.img

1 adb reboot bootloader         //进入bootloader模式
2 fastboot flash splash_v splash.img         //将镜像刷入相应分区(分区名字可能各个厂商的名字不一样)
3 fastboot reboot               //重启平板电脑

方法二
准备一张png图片logo.png,分辨率不要超过320*200,在ubuntu下敲如下三行命令,要事先安装好conver xxd等工具 。logo_new.png 图片。

convert logo.png -recolor "0 0 1,0 1 0,1 0 0" logo_new.png   //将图片重新着色BRG转C成rgb
convert -depth 8 logo_new.png rgb:logo_raw.raw    //将png格式转成raw图片格式
xxd -c16 -i logo_raw.raw > splash.h  //生成对于的splash.h头文件的数组

用splash.h文件中数组的内容替换bootable/bootloader/lk/platform/msm_shared/include/splash.h中的数组imageBuffer_rgb888,同时修改分辨率。

 #define SPLASH_IMAGE_WIDTH     320         
 #define SPLASH_IMAGE_HEIGHT    200 

然后重编lk,将生成的emmc_appsboot.mbn烧进单板即可。

注意:方法二需要保证splash分区为空,splash分区非空,方法二是不起作用的,所以用方法二之前,最好先擦除splash分区。原因如下

修改fastboot显示图片

我通过aboot.c的源码发现在进入fastboot模式之后显示的图片也是splash.h文件中数组的内容,所有我们想要修改fastboot显示图片也可以通过第二种方法进行修改。

开机动画

一.Android默认开机动画是显示“android”字样的图片,想要替换掉“android”,需要用到bootanimation.zip.

二.原生Android系统中好像没有bootanimation.zip,可以把bootanimation.zip文件放到设备system/media目录下(需要root权限)。放到此目录下后,开机会自动加载该文件里的图片,作为动画。

三.有的厂商自己做了开机动画,所以我们也可以通过adb pull 命令从system/media 目录下把bootanimation.zip文件下载到电脑上,因为这些文件都是只读文件,所以我们需要在dos界面获取root权限。然后设置’systen’为可写。


adb root //获取root权限,adb remount 需要root权限

adb remount  //将 'system' 部分置于可写入的模式 ,默认 'system' 部分是只读的

有时候会存在adb remount 失败的情况

C:\Users\wpp>adb remount
remount of /system failed: Read-only file system
remount failed

当出现这种情况我们需要在adb remount 之前输入adb disable-verity


C:\Users\wpp>adb disable-verity 
Verity disabled on /system
Now reboot your device for settings to take effect

C:\Users\wpp> adb reboot

C:\Users\wpp> adb root

C:\Users\wpp> adb remount
remount succeeded

这时候我们就能把system/media 里面的文件拿出来和写入文件了

四.bootanimation.zip内容和制作
1.当我们有现成的bootanimation.zip文件的时候,我们可以解压该文件一般会得到

part0 part1 两个文件夹和1个desc.txt文件

2.上面的文件夹里面存放的就是开机要显示的图片。一般来说,最后那个文件夹存放一张照片,然后设置成循环播放,就可以在进入系统界面之前一直有画面,不会出现黑屏的情况(所有动画都做完了,但是还没进入到系统界面就会出现黑屏)。

3.part0里面保存的必须是和desc.txt中分辨率相同的图片(后面会说desc.txt文件怎么看分辨率),可以替换成自己想用的一组图片,一般为.jpg .png 格式的图片。

4.desc.txt里面的内容,比如是这样的:

	1920 1080 60
	p 1 0 part0
	p 0 0 part1

第一行的1920 1080 60前面两个数据代表像素,即:1920*1080;

第一行第三个数据:60代表的是每秒播放多少帧;

第二行第一个字母 “p”不知道什么玩意儿,固定以他为开头;

第二行第二个数字1,代表重复播放多少次,"1”即代表播放1次(0侧代表无限循环播放,应该是直到代码里面设置的动画时间耗完为止);

第二行第三个数字“0”代标的是前后两帧之间间隔时间/帧数(比如每秒播放10帧,如果这个数字设为10,则延迟1秒了,待确认);

第二行第四个参数,这就是上文说到的和文件夹名称对应的了,如果是folder~则文件夹名称也是这个,我的5.1里面只设置了一个part0,修改的时候我也将他默认为part0了。

第三行也是一样的。

不过这里有个严重问题一定要注意,编写完成保存之前要记得换行,即敲回车键!!!分成如我上面显示的那样,因为用记事本打开是在一行显示的,要不然在替换原生动画之后会只是一个图片。切记,我在这个地方大意了,搞了很久。

5.最后就是压缩了,压缩一定要选仅存储的方式进行压缩(这里要注意,有的人可能在做好文件夹和编写好txt文件后准备压缩,但是又添加了一层文件夹,这会导致识别不了动画资源,在从logo进入到动画的时候就是一片黑屏,直到Android系统启动后才OK)。

最后使用adb push命令把生成好的bootanimation.zip文件 push到 /system/media/ 目录下,再开机就可以显示新的开机画面了。

你可能感兴趣的:(msm8953)