技术贴|如何在【RK3588】ELF 2开发板用户空间更换开机Logo

发布时间:2025-11-05 18:43:48

传统修改开发板开机Logo的方式需要重新编译内核,流程复杂且耗时。本文介绍了一种创新方案:通过预先在存储中划分专用的Logo分区,允许用户直接在文件系统中更新Logo图片文件,这极大地简化了定制流程,提升了开发与调试效率。

一、添加Logo分区

执行以下命令编辑参数文件:

elf@ubuntu:~/work/ELF2-linux-source$ vi device/rockchip/.chips/elf2/parameter.txt

修改内容如下(建议参考下图配置):

CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00020000@0x00008000(boot),0x00040000@0x00028000(recovery),0x00010000@0x00068000(backup),0x01c00000@0x00078000(rootfs),0x00040000@0x01c78000(oem),0x00100000@0x01cb8000(logo),-@0x01db8000(userdata:grow)
此处把Logo分区的大小划分为0x00100000(对应512MB),用户可根据实际需求调整分区大小,建议预留足够空间以适配不同分辨率的Logo图片。

二、修改Uboot

1、修改u-boot/arch/arm/mach-rockchip/resource_img.c文件

执行命令打开目标文件:

elf@ubuntu:~/work/ELF2-linux-source$ vi u-boot/arch/arm/mach-rockchip/resource_img.c

搜索rockchip_read_resource_dtb函数,在函数内添加以下两句代码:

struct blk_desc *desc = rockchip_get_bootdev();
resource_setup_logo_bmp(desc);

添加后的完整函数代码如下:

int rockchip_read_resource_dtb(void *fdt_addr, char **hash, int *hash_size){        struct resource_file *f = NULL;        int ret;        struct blk_desc *desc = rockchip_get_bootdev();#ifdef CONFIG_ROCKCHIP_HWID_DTB        if (resource_scan())                return -ENOENT;        f = resource_read_hwid_dtb();#endif        /* If no dtb match hardware id(GPIO/ADC), use the default */        if (!f)                f = resource_get_file(DEFAULT_DTB_FILE);        if (!f)                return -ENODEV;        ret = rockchip_read_resource_file(fdt_addr, f->name, 00);        if (ret < 0)                return ret;        if (fdt_check_header(fdt_addr))                return -EBADF;        *hash = f->hash;        *hash_size = f->hash_size;        printf("DTB: %s\n", f->name);        resource_setup_logo_bmp(desc);        return 0;}

2、修改u-boot/configs/board_elf2_uboot_defconfig文件

执行命令打开配置文件:

elf@ubuntu:~/work/ELF2-linux-source$ vi u-boot/configs/board_elf2_uboot_defconfig

在文件中添加以下两行配置(若已存在则修改):

CONFIG_ROCKCHIP_RESOURCE_IMAGE=y
CONFIG_ANDROID_AVB=n

添加后的配置文件片段如下:

注意:CONFIG_ANDROID_AVB配置项默认可能已存在,需将其值修改为n(禁用AVB验证),否则可能导致Logo分区加载失败。

三、编译并烧写

完成上述修改后,执行全编译命令(具体编译命令根据项目环境调整),编译完成后将镜像烧写至开发板。

烧写完成后启动开发板,执行fdisk -l命令查看分区信息,确认Logo分区已创建:

四、更新Logo

1. 准备Logo图片文件:需准备两个BMP格式图片(logo.bmp为Uboot阶段Logo,logo_kernel.bmp为内核阶段Logo),建议分辨率与开发板屏幕匹配。

2. 将图片文件传入开发板(可通过SSH、U盘等方式),执行以下命令生成Logo镜像并写入Logo分区:

root@elf2-buildroot:~# cat logo.bmp > logo.img && truncate -s %512 logo.img && cat logo_kernel.bmp >> logo.imgroot@elf2-buildroot:~# dd if=logo.img of=/dev/block/by-name/logo1968+1 records in1968+1 records out1007670 bytes (1.0 MB, 984 KiB) copied, 0.0459117 s, 21.9 MB/sroot@elf2-buildroot:~# sync
truncate -s %512 logo.img命令用于将logo.img文件大小对齐到512字节整数倍,确保分区写入兼容性;sync命令用于强制刷新缓存,避免数据写入不完整。

3. 执行reboot命令重启开发板,重启后即可看到更新后的开机Logo。

其它推荐:

推荐阅读:

/* 53客服*/ /* 百度统计*/ /* 百度站长*/