需求
不同客户要求使用不同的开机logo和开机动画,为实现对不同需求的兼容,减少不同系统版本的维护工作
以往的实现方式
rockchip 平台默认logo存放在resource.img中,bootanimation存放在system分区,因此以往需要针对不同的需求单独建立分支进行维护,不同分支的区别仅仅在logo和动画。
改进方案
添加logo和oem分区,烧录时针对不同的需求选择对应的文件即可。
实现
修改分区表,确定各个分区大小
- oem分区:oem分区用于存放开机动画,考虑到不同分辨率和帧数的动画体积较大,因此分配了300M空间
console=ttyFIQ0 androidboot.baseband=N/A androidboot.selinux=permissive androidboot.hardware=rk30board androidboot.console=ttyFIQ0
init=/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(trust),0x00002000@0x00006000(misc),
0x00008000@0x00008000(resource),0x0000C000@0x00010000(kernel),0x00010000@0x0001C000(boot),0x00010000@0x0002C000(recovery),0x00038000@0x0003C000(backup),
0x00040000@0x00074000(cache),0x00400000@0x000B4000(system),0x00008000@0x004B4000(metadata),0x00019000@0x004BC000(vendor0),0x00019000@0x004D5000(vendor1),
0x00096000@0x004EE000(oem),0x00002000@0x00584000(logo),-@0x00586000(userdata)
其中 0x004EE000表示该分区的起始地址,0x00096000 表示分区大小
大小以block为单位,即共有0x00096000个block,每个block的大小为512byte,
logo分区:由于rockchip对开机logo有特定要求,8bit bmp,因此logo并不会占用很大空间,计算方法同oem分区
添加完分区后,需要修改userdata分区的起始地址
修改fstab,挂载oem分区
1 | diff --git a/device/rockchip/rk3288/fstab.rk30board.bootmode.emmc.rk3288w b/device/rockchip/rk3288/fstab.rk30board.bootmode.emmc.rk3288w |
uboot修改
rockchip 在uboot已经实现使用单独logo分区的功能,其实现存在一个bug具体修改如下:
1 | diff --git a/u-boot/common/resource.c b/u-boot/common/resource.c |
其他修改
- rk3288.mk bootanimation不再需要拷贝到system/media目录下
- mkimage.sh 添加拷贝logo及bootanimation的相关操作
- vendor下添加制作好的oem.img 和logo.bmp
同时添加了修改用的脚本modify-oem.sh
1 | script_dir=`dirname "$BASH_SOURCE"` |
完整patch
1 | diff --git a/device/rockchip/rk3288/fstab.rk30board.bootmode.emmc.rk3288w b/device/rockchip/rk3288/fstab.rk30board.bootmode.emmc.rk3288w |