RK3568开发板 Buildroot:免编译 LOGO 替换 独立分区实现方案

原创 作者 Forlinx 2026-02-11 16:45:00 rk3568 rk3568开发板

OK3568-C开发板LOGO替换技术方案

基于Buildroot 4.19.206系统的独立分区方案,实现无需重新编译全量源码的便捷LOGO替换机制

本方案专为OK3568-C开发板(基于瑞芯微RK3568处理器研发设计)量身打造,以patch格式规范呈现源码修改内容,通过新增独立LOGO分区、搭配开机自启脚本的科学方式,实现开机LOGO图片的便捷替换,无需改动核心源码,亦无需重新编译烧写全量系统,可显著提升开发调试效率,适配Linux 4.19.206系统环境。

1. 方案概述

本文所提供的源码修改内容,均以 patch格式标准化呈现(便于团队复用、版本管控及协同开发),其核心实现逻辑清晰明确:

独立分区设计

在系统镜像中新增独立logo分区,实现LOGO数据的隔离存储与管理,避免与系统其他分区产生冲突。

自动化脚本

创建开机自启脚本,自动检测U盘内指定路径的logo图片,实现自动化镜像生成与烧录。

免编译更新

无需重新编译全量源码,通过简单的重启操作即可完成开机LOGO替换,简化操作流程。

版本可控

Patch格式标准化呈现,便于团队复用、版本管控及协同开发,确保技术方案的可维护性。

2. 源码修改方法

!
常见问题

经实际测试验证,部分用户在操作过程中,因OK3568-linux-source/device/rockchip/路径下缺失logo/logo_normal文件夹,导致全编译流程异常终止。

2.1 解决措施

针对上述问题,需手动创建对应空文件夹,且文件夹路径需与后续配置参数严格保持一致,确保编译流程顺畅:

Bash
# 赋予读写执行权限(所有者、组用户、其他用户均有执行权限)
mkdir -p logo/logo_normal

2.2 虚拟机源码修改

(1)配置logo分区挂载

buildroot/board/rockchip/ok3568/fs-overlay-recovery/etc/fstab

作用:新增logo分区挂载规则,将logo分区精准挂载至/mnt/logo目录,为系统访问logo分区搭建便捷通道。

Diff
diff --git a/buildroot/board/rockchip/ok3568/fs-overlay-recovery/etc/fstab b/buildroot/board/rockchip/ok3568/fs-overlay-recovery/etc/fstab
index bb97eaf92..b5e92e026 100644
--- a/buildroot/board/rockchip/ok3568/fs-overlay-recovery/etc/fstab
+++ b/buildroot/board/rockchip/ok3568/fs-overlay-recovery/etc/fstab
@@ -9,5 +9,6 @@ sysfs /sys sysfs defaults 0 0
 /dev/block/by-name/misc /misc emmc defaults 0 0
 /dev/block/by-name/userdata /userdata ext2 defaults 0 0
 /dev/block/by-name/oem /oem ext2 defaults 0 0
+# 新增logo分区挂载:设备节点为/dev/block/by-name/logo,挂载点/mnt/logo,文件系统ext2
+/dev/block/by-name/logo /mnt/logo ext2 defaults 0 2
 /dev/sda1 /mnt/usb_storage vfat defaults 0 0
 /dev/mmcblk1p1 /mnt/sdcard vfat defaults 0 0

(2)修改固件生成脚本

device/rockchip/common/mkfirmware.sh

作用:新增logo镜像生成逻辑,实现logo.img镜像的自动化构建,同时将其纳入固件包。

Diff
diff --git a/device/rockchip/common/mkfirmware.sh b/device/rockchip/common/mkfirmware.sh
index cc07d7a1b..5a1328a12 100755
--- a/device/rockchip/common/mkfirmware.sh
+++ b/device/rockchip/common/mkfirmware.sh
@@ -4,8 +4,11 @@ set -e
 
 SCRIPT_DIR=$(dirname $(realpath $BASH_SOURCE))
 TOP_DIR=$(realpath $SCRIPT_DIR/../../..)
+# 定义logo目录路径:拼接源码根目录与配置文件中指定的RK_LOGO_DIR(logo_normal)
+LOGO_DIR=$TOP_DIR/device/rockchip/logo/$RK_LOGO_DIR
 cd $TOP_DIR
 
 # (原有函数逻辑保持不变)
@@ -268,6 +271,27 @@ then
     fi
 fi
 
+# 新增logo镜像生成逻辑
+# 定义logo镜像生成脚本路径
+LOGO_FAKEROOT_SCRIPT=$ROCKDEV/logo.fs
+if [ $RK_LOGO_DIR ] # 判断是否配置了logo目录(从BoardConfig中读取)
+then
+    if [ -d "$LOGO_DIR" ] # 检查logo目录是否存在
+    then
+        # 创建logo镜像生成脚本
+        echo "#!/bin/sh" > $LOGO_FAKEROOT_SCRIPT
+        echo "set -e" >> $LOGO_FAKEROOT_SCRIPT # 脚本执行出错时立即退出
+        if [ "$RK_LOGO_FS_TYPE" = "ubi" ]; then # 判断logo分区文件系统类型
+            # UBI文件系统:调用mkimage工具生成带指定参数的logo镜像
+            echo "$MKIMAGE $LOGO_DIR $ROCKDEV/logo.img $RK_LOGO_FS_TYPE $RK_LOGO_PARTITION_SIZE logo $RK_UBI_PAGE_SIZE $RK_UBI_BLOCK_SIZE" >> $LOGO_FAKEROOT_SCRIPT
+        else
+            # 非UBI文件系统(本文为ext2):生成基础logo镜像
+            echo "$MKIMAGE $LOGO_DIR $ROCKDEV/logo.img $RK_LOGO_FS_TYPE " >> $LOGO_FAKEROOT_SCRIPT
+        fi
+        chmod a+x $LOGO_FAKEROOT_SCRIPT # 赋予脚本可执行权限
+        $FAKEROOT_TOOL -- $LOGO_FAKEROOT_SCRIPT # 执行脚本生成镜像
+        rm -f $LOGO_FAKEROOT_SCRIPT # 清理临时脚本
+    else
+        echo "warning: $LOGO_DIR not found!" # 目录不存在时输出警告
+    fi
+fi
+
 if [ -f $UBOOT_IMG ]
 then
     echo -n "create uboot.img..."

(3)添加logo分区配置

device/rockchip/ok3568/BoardConfig-ok3568.mk

作用:精准配置logo分区的文件系统类型、目录名称、分区大小等核心参数。

Diff
diff --git a/device/rockchip/ok3568/BoardConfig-ok3568.mk b/device/rockchip/ok3568/BoardConfig-ok3568.mk
index 74c2fff2d..202efa5ff 100644
--- a/device/rockchip/ok3568/BoardConfig-ok3568.mk
+++ b/device/rockchip/ok3568/BoardConfig-ok3568.mk
@@ -46,12 +46,17 @@ export RK_RAMBOOT_TYPE=
 export RK_OEM_FS_TYPE=ext2
 # Set userdata partition type, including ext2, fat
 export RK_USERDATA_FS_TYPE=ext2
+# 配置logo分区文件系统类型(与挂载配置一致为ext2)
+export RK_LOGO_FS_TYPE=ext2
 #OEM config
 export RK_OEM_DIR=oem_normal
 # OEM build on buildroot
 #export RK_OEM_BUILDIN_BUILDROOT=YES
 #userdata config
 export RK_USERDATA_DIR=userdata_normal
+# logo分区核心配置
+export RK_LOGO_DIR=logo_normal # logo文件存放目录(需与实际创建的文件夹名称一致)
+export RK_LOGO_PARTITION_SIZE=0x0000a000 # logo分区大小(以512字节存储块为单位:0x0000a000×512=20MB)
 #misc image
 export RK_MISC=wipe_all-misc.img
 #choose enable distro module

(4)修改eMMC分区表

device/rockchip/ok3568/parameter-buildroot-fit.txt

作用:在eMMC分区表中新增20M大小的logo分区,同步微调userdata分区的起始地址,有效规避分区重叠问题。

Diff
diff --git a/device/rockchip/ok3568/parameter-buildroot-fit.txt b/device/rockchip/ok3568/parameter-buildroot-fit.txt
index 17d6da32b..3c5f175d9 100644
--- a/device/rockchip/ok3568/parameter-buildroot-fit.txt
+++ b/device/rockchip/ok3568/parameter-buildroot-fit.txt
@@ -8,5 +8,5 @@ MACHINE: 0xffffffff
 CHECK_MASK: 0x80
 PWR_HLD: 0,0,A,0,1
 TYPE: GPT
-CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00c00000@0x00038000(rootfs),0x00040000@0x00c38000(oem),-@0x00c78000(userdata:grow)
+# 新增logo分区:大小0x0000a000(20MB),起始地址0x00c78000(接续oem分区);userdata分区起始地址调整为0x00c82000(0x00c78000+0x0000a000)
+CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00c00000@0x00038000(rootfs),0x00040000@0x00c38000(oem),0x0000a000@0x00c78000(logo),-@0x00c82000(userdata:grow)
 uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9
i
分区表调整说明

分区表的修改需结合实际硬件的eMMC容量灵活调整,确保配置参数与硬件规格高度适配。详细操作规范可参考官方文档。

(5)添加logo镜像到固件包

tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file

作用:将自动化生成的logo.img镜像纳入固件打包列表,确保固件烧录过程中,logo镜像可同步写入eMMC的logo分区。

Diff
diff --git a/tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file b/tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file
index 4cad31ed5..dfaa54157 100644
--- a/tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file
+++ b/tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file
@@ -13,6 +13,7 @@ boot Image/boot.img
 recovery Image/recovery.img
 rootfs Image/rootfs.img
 oem Image/oem.img
+logo Image/logo.img # 新增logo镜像打包配置
 userdata Image/userdata.img

2.3 创建开机自启脚本

(1)新建脚本文件

buildroot/board/rockchip/ok3568/fs-overlay/etc/init.d/S99logo

脚本功能:系统开机后,自动检测U盘内指定路径的logo图片,若成功检测到目标图片,将自动完成logo镜像的生成与logo分区的烧录操作,同时创建标志文件,有效避免重复烧录。

Bash
#!/bin/sh
# 检测U盘logo文件并烧录的核心函数
check_sdcard() {
    while true; do # 循环检测(确保U盘挂载完成)
        sleep 1 # 每秒检测一次,降低系统资源占用
        # 判断U盘是否挂载且存在指定logo文件夹(路径需与U盘实际存放logo文件的文件夹路径保持一致)
        if [[ -d "/run/media/sda1/Forlinx_logo" ]]; then
            cd "/run/media/sda1/Forlinx_logo"
            # 检测标志文件:存在则说明已烧录,直接退出循环
            if [[ -f "Forlinx_logo_flag" ]]; then
                echo "Forlinx_logo_flag file exists, skip reflashing."
                break
            else
                # 检测是否同时存在uboot和kernel阶段的logo文件(二者缺一不可)
                if [[ -f "logo.bmp" && -f "logo_kernel.bmp" ]]; then
                    # 合并logo文件生成镜像(uboot logo在前,kernel logo在后)
                    cat "logo.bmp" > "logo.img"
                    # 镜像文件按512字节对齐(适配分区存储块大小)
                    truncate -s %512 "logo.img"
                    cat "logo_kernel.bmp" >> "logo.img"
                    # 烧录镜像至logo分区(of参数为logo分区设备节点)
                    dd if="logo.img" of="/dev/block/by-name/logo"
                    echo "Logo files flashed to /dev/block/by-name/logo successfully."
                    touch "Forlinx_logo_flag" # 创建标志文件,避免重复烧录
                    break; # 烧录完成,退出循环
                else
                    echo "Error: Missing logo.bmp or logo_kernel.bmp in the U盘."
                fi
            fi
        fi
    done
}
# 脚本入口:仅在start参数下执行烧录逻辑(符合init.d脚本规范)
case "$1" in
    start)
        check_sdcard & # 后台运行检测函数,不阻塞系统启动
        ;;
    *)
        exit 1 # 非start参数直接退出
        ;;
esac

(2)赋予脚本可执行权限

在终端执行以下命令,为脚本配置可执行权限:

Bash
# 赋予读写执行权限(所有者、组用户、其他用户均有执行权限)
chmod 775 S99logo
权限验证

执行ls -l S99logo命令,若输出结果显示为-rwxrwxr-x,则表明脚本权限配置成功,可正常运行。

(3)编译烧录

所有修改配置操作全部完成后,执行全编译命令生成新固件,将新固件重新烧录至开发板,即可完成整套logo替换功能的配置工作,具体编译命令如下:

Bash
# 全编译(根据实际编译脚本调整,此处为常规命令示例)
make clean && make

3. 验证方法

3.1 准备logo文件

要求项 详细说明
格式要求 logo图片需严格遵循 BMP格式(Rockchip平台默认支持该格式,确保logo正常显示)
大小限制 两张logo图片的总大小不得超过20MB,与logo分区大小精准匹配,避免因文件过大导致烧录失败
U-Boot阶段logo logo.bmp(系统开机初期显示,彰显品牌标识)
Kernel阶段logo logo_kernel.bmp(系统启动过程中显示,保障启动体验的连贯性)

3.2 U盘配置

1
创建文件夹

在U盘中新建文件夹,文件夹命名为Forlinx_logo,需与脚本中指定的路径严格保持一致,且严格区分大小写。

2
放入logo文件

将准备就绪的两张logo图片(logo.bmp和logo_kernel.bmp),精准放入该文件夹内。

3
格式化U盘

确保U盘文件系统格式为 FAT32,该格式为RK3568开发板默认支持的U盘格式。

3.3 烧录验证步骤

步骤1将配置完成的U盘,平稳插入开发板的USB接口,确保接触良好、连接稳定。

步骤2重启开发板,需完成 两次重启操作:

  • 第一次重启:RK3568开发板开机自启脚本自动检测到U盘内的logo文件,同步完成logo镜像的生成与logo分区的烧录
  • 第二次重启:系统成功读取logo分区内的新logo文件,顺利完成开机logo的替换并稳定生效
!
关键注意事项
  • 若需执行硬重启(即断电重启),需先在终端执行sync命令,确保所有数据写入完成
  • 验证成功后,U盘Forlinx_logo文件夹中会新增两个文件:logo.img(自动生成的logo镜像文件)和Forlinx_logo_flag(烧录标志文件)

3.4 重新替换logo

若RK3568开发板需更换新的开机logo,只需手动删除U盘中Forlinx_logo文件夹内的Forlinx_logo_flag文件,替换文件夹内的logo.bmp和logo_kernel.bmp两张图片后,重复上述重启验证步骤,即可完成新logo的替换,操作便捷高效。


咨询立即获得专属报价

华北区负责人二维码

华北区负责人

华东区负责人二维码

华东区负责人

华南区负责人二维码

华南区负责人

中西区负责人二维码

中西区负责人

相关产品 >

  • FET3568-C核心板

    RK3568性能强而稳 国产芯|飞凌嵌入式RK3568系列核心板,采用瑞芯微国产高性能AI处理器RK3568设计生产,RK3568兼具CPU、GPU、NPU、VPU于一身,RK3568 性能、性价比在同类产品中具有较高优势,RK3568处理器是一款定位中高端的通用型SoC, 飞凌RK3568核心板主要面向工业互联网、HMI、NVR存储、车载中控、工业网关等领域。目前RK3568系列已经批量稳定出货

    了解详情
    FET3568-C核心板
  • OK3568-C开发板

    强而稳,国产芯,1Tops算力,多路高速接口|飞凌RK3568系列RK3568开发板基于国产工业级AI处理器RK3568四核64位Cortex-A55 处理器设计。RK3568作为国产化高性能处理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU达到1Tops,飞凌RK3568系列核心板提供瑞芯微RK3568规格书_datasheet_数据手册_原理图等,


    了解详情
    OK3568-C开发板

推荐阅读 换一批 换一批