RK3568开发板 Buildroot:免编译 LOGO 替换 独立分区实现方案
Forlinx
2026-02-11 16:45:00
rk3568
rk3568开发板
1. 方案概述
本文所提供的源码修改内容,均以 patch格式标准化呈现(便于团队复用、版本管控及协同开发),其核心实现逻辑清晰明确:
在系统镜像中新增独立logo分区,实现LOGO数据的隔离存储与管理,避免与系统其他分区产生冲突。
创建开机自启脚本,自动检测U盘内指定路径的logo图片,实现自动化镜像生成与烧录。
无需重新编译全量源码,通过简单的重启操作即可完成开机LOGO替换,简化操作流程。
Patch格式标准化呈现,便于团队复用、版本管控及协同开发,确保技术方案的可维护性。
2. 源码修改方法
经实际测试验证,部分用户在操作过程中,因OK3568-linux-source/device/rockchip/路径下缺失logo/logo_normal文件夹,导致全编译流程异常终止。
2.1 解决措施
针对上述问题,需手动创建对应空文件夹,且文件夹路径需与后续配置参数严格保持一致,确保编译流程顺畅:
# 赋予读写执行权限(所有者、组用户、其他用户均有执行权限) mkdir -p logo/logo_normal
2.2 虚拟机源码修改
(1)配置logo分区挂载
buildroot/board/rockchip/ok3568/fs-overlay-recovery/etc/fstab
作用:新增logo分区挂载规则,将logo分区精准挂载至/mnt/logo目录,为系统访问logo分区搭建便捷通道。
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 --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 --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 --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
分区表的修改需结合实际硬件的eMMC容量灵活调整,确保配置参数与硬件规格高度适配。详细操作规范可参考官方文档。
(5)添加logo镜像到固件包
tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file
作用:将自动化生成的logo.img镜像纳入固件打包列表,确保固件烧录过程中,logo镜像可同步写入eMMC的logo分区。
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分区的烧录操作,同时创建标志文件,有效避免重复烧录。
#!/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)赋予脚本可执行权限
在终端执行以下命令,为脚本配置可执行权限:
# 赋予读写执行权限(所有者、组用户、其他用户均有执行权限) chmod 775 S99logo
执行ls -l S99logo命令,若输出结果显示为-rwxrwxr-x,则表明脚本权限配置成功,可正常运行。
(3)编译烧录
所有修改配置操作全部完成后,执行全编译命令生成新固件,将新固件重新烧录至开发板,即可完成整套logo替换功能的配置工作,具体编译命令如下:
# 全编译(根据实际编译脚本调整,此处为常规命令示例) 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盘配置
在U盘中新建文件夹,文件夹命名为Forlinx_logo,需与脚本中指定的路径严格保持一致,且严格区分大小写。
将准备就绪的两张logo图片(logo.bmp和logo_kernel.bmp),精准放入该文件夹内。
确保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系列已经批量稳定出货
了解详情
-
OK3568-C开发板
强而稳,国产芯,1Tops算力,多路高速接口|飞凌RK3568系列RK3568开发板基于国产工业级AI处理器RK3568四核64位Cortex-A55 处理器设计。RK3568作为国产化高性能处理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU达到1Tops,飞凌RK3568系列核心板提供瑞芯微RK3568规格书_datasheet_数据手册_原理图等,
了解详情


