一.开机LOGO概述
rk3568开机logo由 uboot和kerne两阶段所用图片构成uboot启动阶段主动加载 logo.bmp,kernel启动阶段会加载logo.bmp和logo kernel.bmp。在内核编译时这两张图片会打包到 resource.img镜像,然后再合并到boot.img; logo文件直接关系boot.img大小boot.img分区超出分区表标定大小会导致无法刷机或升级失败。
rockchip替换kernel中的logo.bmp与logo_kernel.bmp文件,即可替换uboot与kernel的开机logo。
RK芯片开机logo目前只支持bmp格式,并且位深度支持8,32bit。
Rockchip系列芯片开机 Logo 存放在 kernel目录的 logo.bmp、logo kernel.bmp,内核编译后同 内核设备树打包到 resource.img,Android源码编译完整升级包时会额外将u-bo0t阶段充电相关显示画面一并打包到resource.img,以显示l0g0方式显示充电画面、低电量等画面。Android10 以后支持中加载10g0分区,l0go.mg镜像中包含开机l0g0、关机充电画面等图片,系统启动过程优先加载此分区中的资源。
二.开机LOGO相关配置
boot recovery logo分区大小设置:
rockchip/common/build/rockchip/Partitions.mk
BOARD_RECOVERYIMAGE_PARTITION_SIZE ?= 100663296
dts配置如下:
&route_hdmi {
status = "okay";
logo,mode = "center";
connect = <&vopb_out_hdmi>;
};
&hdmi {
#address-cells = <1>;
#size-cells = <0>;
#sound-dai-cells = <0>;
status = "okay";
};
&display_subsystem {
status = "okay";
};
&vopb_out_hdmi {
status = "okay";
};
&vopl_out_hdmi {
status = "disabled";
};
注意:这里的dts是u-boot中的dts。还有就是route_hdmi节点中的connect属性需要和内核中的配置一样,否则可能导致kernel阶段的logo不显示。
uboot显示框架代码:
u-boot/drivers/video/display-uclass.c
u-boot/drivers/video/drm/bmp_helper.c
u-boot/drivers/video/drm/rockchip_display.c
在开机log uboot阶段会有读取开机logo的打印:
这里会去读取uboot阶段的logo
这里会去读取kernel阶段的logo。
u-boot/drivers/video/drm/rockchip_display.c
static int load_bmp_logo(struct logo_info *logo, const char *bmp_name)
{
#ifdef CONFIG_ROCKCHIP_RESOURCE_IMAGE
struct rockchip_logo_cache *logo_cache;
struct bmp_header *header;
void *dst = NULL, *pdst;
int size, len;
int ret = 0;
int reserved = 0;
int dst_size;
if (!logo || !bmp_name)
return -EINVAL;
logo_cache = find_or_alloc_logo_cache(bmp_name);
if (!logo_cache)
return -ENOMEM;
if (logo_cache->logo.mem) {
memcpy(logo, &logo_cache->logo, sizeof(*logo));
return 0;
}
header = malloc(RK_BLK_SIZE);
if (!header)
return -ENOMEM;
printf("read ist customer bmp %s header fail\n",bmp_name);
len = rockchip_read_resource_file(header, bmp_name, 0, RK_BLK_SIZE);
printf("get logo bit_count: %d\n", get_unaligned_le16(&header->bit_count));
printf("get logo width: %d\n", get_unaligned_le32(&header->width));
printf("get logo height: %d\n", get_unaligned_le32(&header->height));
.........
}
bmp_name在uboot打印的是logo.bmp,读取的是logo.bmp。在kernel读取的是logo_kernel.bmp,读取的是logo_kernel.bmp。
标签:kernel,RK3568,boot,header,bmp,LOGO,开机,logo From: https://blog.csdn.net/weixin_49303682/article/details/140397984