高通平台第一帧splash和Bootanimation
A.Splash image/第一帧图像/开机logo(有很多叫法,但比较官方的一般叫bootloader logo或者LK display logo)
替换LK display (bootloader) logo有两种方式
a.利用平台自带的logo_gen.py生成splash.img镜像,可以使用fastboot重新刷splash.img分区
b.利用三方软件将.png转为bootable/bootloader/lk/platform/msm_shared/include/splash.h头文件中的buffer并替换
方法b只适用于分辨率较低的图片(经测试临界点大概在320*240左右),方法a适用于各种分辨率图片(.png)
看源码bootable/bootloader/lk/dev/fbcon/fbcon.c中的逻辑
系统会先通过fetch_image_from_partition()获取.img格式镜像,如失败
会去splash.h头文件获取数组,如果数组无效或者获取失败,会显示default fbimg
先说下生成splash.img的步骤
b. 在64位的版本中buffer地址为4M,
reserved-memory {
…
cont_splash_mem: splash_region@83000000 {
reg = <0x0 0x90000000 0x0 0x1400000>;
};
}
debug可以通过kernal log看是否有类似报错:
[ 0.000000] memblock_reserve: [0x0000008e000000-0x00000090800000] dma_contiguous_reserve_area+0xdc/0x1e4
[ 0.000000] cma: CMA: reserved 40 MiB at 0x000000008e000000 for cont_splash_mem
[ 0.000000] reserved[0x3] [0x0000008e000000-0x000000907fffff], 0x2800000 bytes
Kernal log添加方法如下:
a. 在kernal 配置文件中扩大kernal log buffer的大小:
// msm-perf_defconfig
CONFIG_LOG_BUF_SHIFT=18
b. 打开memblock debug
//arch/arm/boot/dts/qcom/msmxxxx.dtsi
chosen {
// bootargs = “boot_cpus=0,1,2,3,4 sched_enable_hmp=1”;
bootargs = “boot_cpus=0,1,2,3,4 sched_enable_hmp=1 memblock=debug”; };
mdss_fb0: qcom,mdss_fb_primary {
cell-index = <0>;
compatible = “qcom,mdss-fb”;
// qcom,mdss-fb-splash-logo-enabled;
qcom,cont-splash-memory {
linux,contiguous-region = <&cont_splash_mem>;
};
};
B.Boot animation
这个比较简单,甚至都没有什么需要debug的点
1.bootanimation.zip由两部分组成(配置文件和图片文件夹)
a.desc.txt - 动画配置文件,帧数循环次数,文件名称, 需注意文件格式需要改为ANSI
480 960 1 - “480” 为动画播放宽度,”960”为动画播放高度,不确定的话可以用adb shell wm size或者adb shell dumpsys window displays看一下,”1”为fps值
p 1 0 part0 - “p”是一个标志位, 说明当service.bootanim.exit属性为true时,不用等待所有图片播放完毕就跳出播放,第一位为”c”时,说明当service.bootanim.exit属性为true时,必须要等播放完成后才会跳出这部分。”1” 为循环次数,如果这个值为”0”的话,说明此部分动画会一直循环,直到service.bootanim.exit为true。”0”为播放完这部分的暂停,为0代表无暂停。”part0”为存放动画图片的文件夹名
p 0 0 part1
b.part0, part1个文件夹 - 也可以手动根据需求添加part3,或者改文件夹名字
2.Zip/unzip bootaimation.zip的所有动作最好都在Linux环境下完成
特别需要注意的是,压缩bootanimation.zip的时候压缩模式必须为存储模式:
zip -r -0 bootanimation.zip part0 part1 desc.txt
压缩完成后请用:
Unzip -t bootanimation检查压缩包是否完整
3.本地验证可以直接把存储模式的bootanimation.zip push到device的/system/media目录下验证
4.编译的话需要在.mk中将bootanimation.zip拷贝到system/media目录:
PRODUCT_COPY_FILES += device/qcom/msm8937_64/bootanimation.zip:system/media/bootanimation.zip