RK3568平台(基础篇)开机LOGO

一.开机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。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式_笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值