关于增加logo分区并支持直接刷bmp格式图片

产品需要给到客户去自定义开机logo并且不同的客户logo也不一样。所以我们需要同一个版本客户可以自定义开机logo。并需要方便的替换开机logo的图片。
可以参考RK吴工的博客【rockchip Android平台动态替换开机logo的实现】
我们的平台是rk3326 andorid9属于安卓低版本,并不支持在BoardConfig.mk直接添加分区。那我们就在分区表直接定义一个分区(不同的平台做法其实都差不多就是添加一个分区而已)
diff --git a/rk3326_pie/parameter.txt b/rk3326_pie/parameter.txt index f5eeb10..e4318c3 100755 --- a/rk3326_pie/parameter.txt +++ b/rk3326_pie/parameter.txt -00@0x00964c00(nvrom),-@0x0096cc00(userdata:grow) +000@0x00964c00(nvrom),0x00008000@0x0096cc00(logo),-@0x0096d400(userdata:grow) uuid:system=af01642c-9b84-11e8-9b2a-234eb5e198a0
然后我们开机的时候通过ls -l dev/block/by-name下会有一个logo分区。
因为RK已经实现了你有logo分区就会直接读logo分区里面的信息。有的平台是没有实现的可以去掉他原本加载logo图片的位置,然后使用(linxu根据分区名字获取分区信息的函数比如RK使用的函数是int part_get_info_by_name(struct blk_desc *dev_desc,const char *name, disk_partition_t *info); 返回的就是disk_partition_t 分区的一个结构体)
追一下part_get_info_by_name函数实际调用的是那个linux的自带的读分区函数

int part_get_info_by_name(struct blk_desc *dev_desc, const char *name,
        disk_partition_t *info)
{
   
        struct part_driver *part_drv;
        int ret;
        int i;

        part_drv = part_driver_lookup_type(dev_desc);
        if (!part_drv)
                return -1;
        for (i = 1; i < part_drv->max_entries; i++) {
   
                ret = part_drv->get_info(dev_desc, i, info);
                if (ret != 0) {
   
                        /* no more entries in table */
                        break;
                }
                if (strcmp(name, (const char *)info->name) == 0) {
   
                        /* matched */
                        return i;
                }
        }

        return -1;
}
实际调用的是part_drv->get_info,并匹配每一个分区的info->name跟"logo"匹配
匹配成功就返回getinfo的(info)结构体
.get_info	= part_get_info_ptr(part_get_info_rkparm),
static int part_get_info_rkparm(struct blk_desc *dev_desc, int idx,
		      disk_partition_t *info)
{
   
	struct list_head *node;
	struct rkparm_part *p = NULL;
	int part_num = 1;
	int ret = 0;

	if (idx < 1) {
   
		printf("%s Invalid partition no.%d\n", __func__, idx);
		return -EINVAL;
	}

	if (list_empty(&parts_head) ||
	    (dev_num != ((dev_desc->if_type << 8) + dev_desc->devnum)))
		ret = rkparm_init_param(dev_desc, &parts_head);

	if (ret) {
   
		printf("%s Invalid rkparm partition\n", __func__);
		return -1;
	}

	list_for_each(node, &parts_head) {
   
		p = list_entry(node, struct rkparm_part, node);
		if (idx == part_num)
			break;
		part_num ++;
	}

	if (part_num > idx) {
   
		printf("%s Invalid partition no.%d\n", __func__, idx);
		return -EINVAL;
	}

	info->start = p->start;
	info->size = p->size;
	info
### 回答1: rk uboot logo分区是在Rockchip平台下的U-Boot bootloader中的logo区域。这个分区用于存储设备启动时显示的品牌LOGO或者其他的图形界面。在启动期间,当设备进入U-Boot bootloader时,该区域的图像将会被显示。 RK U-Boot logo分区通常包含了厂商的标志或者是其他品牌部署需要的图形,这个分区被称为boot logo分区。这里的rk是指Rockchip,一个集成电路设计公司。 RK U-Boot logo分区一般体积较小,往往只有几十KB或数百KB大小。管理这个分区可以使用命令行或者其他专门的软件,这些软件可以负责将图像文件写入分区。 RK U-Boot logo分区的重要性在于能够为厂商不仅仅提供一个标志,同时确保了良好的用户体验。现在,品牌LOGO已经成为了区分产品的一种方式,而这个分区也强调了不同平台的不同体系架构,提供了一个共同的工具,用于管理各种设备的启动菜单和图形元素。 ### 回答2: rk uboot logo分区是申威科技公司针对RK处理器平台开发的一种开机logo显示方案。该方案采用uboot引导程序进行控制,通过分区的方式实现logo显示。 在rk uboot logo分区方案中,将显示logo的资源文件打包成一个固定格式的文件,将其烧录至特定的分区中。uboot在启动时会自动加载该分区logo资源文件,然后在屏幕上显示logo图案。 与传统的开机logo显示方案相比,rk uboot logo分区的优势在于其灵活性和可重用性。由于logo资源文件与系统分开存放,因此可以方便地更新或修改logo样式。同时,不同型号的产品也可以共用同一套logo资源文件,减少开发成本和时间。 总之,rk uboot logo分区是一种简单易用、灵活可靠的系统开机logo显示方案,已经得到越来越广泛的应用。 ### 回答3: rk uboot logo分区是指在嵌入式设备中,使用Rockchip处理器的uboot引导程序时,将不同的logo图标分区存储在该设备的闪存中,通过uboot程序调用不同的logo图标来显示在启动过程中。 Rockchip处理器是当前市场上使用最广泛的一款嵌入式处理器,其uboot引导程序是启动整个系统的重要组成部分。而通过使用rk uboot logo分区技术,可以为不同的设备制作独特的启动logo,提升品牌形象和用户体验。 rk uboot logo分区技术的实现过程是将多个不同的logo图标按照设备型号、版本等分类,存储在闪存的不同分区中。当设备启动时,uboot程序会根据设备的型号、版本等信息读取相应的logo图标,将其显示在屏幕上。这样做的好处是可以提升品牌形象和用户体验,增强用户对产品的信任感和归属感。 总之,rk uboot logo分区技术是一种高效的嵌入式设备启动logo管理方式,可以为不同的设备生产独特的logo图标,提升品牌形象和用户体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值