RK3568開發(fā)板 Buildroot:免編譯 LOGO 替換 獨(dú)立分區(qū)實(shí)現(xiàn)方案

原創(chuàng) 作者 Forlinx 2026-02-11 16:45:00 rk3568 rk3568開發(fā)板

OK3568-C開發(fā)板LOGO替換技術(shù)方案

基于Buildroot 4.19.206系統(tǒng)的獨(dú)立分區(qū)方案,實(shí)現(xiàn)無需重新編譯全量源碼的便捷LOGO替換機(jī)制

本方案專為OK3568-C開發(fā)板(基于瑞芯微RK3568處理器研發(fā)設(shè)計(jì))量身打造,以patch格式規(guī)范呈現(xiàn)源碼修改內(nèi)容,通過新增獨(dú)立LOGO分區(qū)、搭配開機(jī)自啟腳本的科學(xué)方式,實(shí)現(xiàn)開機(jī)LOGO圖片的便捷替換,無需改動核心源碼,亦無需重新編譯燒寫全量系統(tǒng),可顯著提升開發(fā)調(diào)試效率,適配Linux 4.19.206系統(tǒng)環(huán)境。

1. 方案概述

本文所提供的源碼修改內(nèi)容,均以 patch格式標(biāo)準(zhǔn)化呈現(xiàn)(便于團(tuán)隊(duì)復(fù)用、版本管控及協(xié)同開發(fā)),其核心實(shí)現(xiàn)邏輯清晰明確:

獨(dú)立分區(qū)設(shè)計(jì)

在系統(tǒng)鏡像中新增獨(dú)立logo分區(qū),實(shí)現(xiàn)LOGO數(shù)據(jù)的隔離存儲與管理,避免與系統(tǒng)其他分區(qū)產(chǎn)生沖突。

自動化腳本

創(chuàng)建開機(jī)自啟腳本,自動檢測U盤內(nèi)指定路徑的logo圖片,實(shí)現(xiàn)自動化鏡像生成與燒錄。

免編譯更新

無需重新編譯全量源碼,通過簡單的重啟操作即可完成開機(jī)LOGO替換,簡化操作流程。

版本可控

Patch格式標(biāo)準(zhǔn)化呈現(xiàn),便于團(tuán)隊(duì)復(fù)用、版本管控及協(xié)同開發(fā),確保技術(shù)方案的可維護(hù)性。

2. 源碼修改方法

!
常見問題

經(jīng)實(shí)際測試驗(yàn)證,部分用戶在操作過程中,因OK3568-linux-source/device/rockchip/路徑下缺失logo/logo_normal文件夾,導(dǎo)致全編譯流程異常終止。

2.1 解決措施

針對上述問題,需手動創(chuàng)建對應(yīng)空文件夾,且文件夾路徑需與后續(xù)配置參數(shù)嚴(yán)格保持一致,確保編譯流程順暢:

Bash
# 賦予讀寫執(zhí)行權(quán)限(所有者、組用戶、其他用戶均有執(zhí)行權(quán)限)
mkdir -p logo/logo_normal

2.2 虛擬機(jī)源碼修改

(1)配置logo分區(qū)掛載

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

作用:新增logo分區(qū)掛載規(guī)則,將logo分區(qū)精準(zhǔn)掛載至/mnt/logo目錄,為系統(tǒng)訪問logo分區(qū)搭建便捷通道。

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分區(qū)掛載:設(shè)備節(jié)點(diǎn)為/dev/block/by-name/logo,掛載點(diǎn)/mnt/logo,文件系統(tǒng)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鏡像生成邏輯,實(shí)現(xiàn)logo.img鏡像的自動化構(gòu)建,同時(shí)將其納入固件包。

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
 
 # (原有函數(shù)邏輯保持不變)
@@ -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
+        # 創(chuàng)建logo鏡像生成腳本
+        echo "#!/bin/sh" > $LOGO_FAKEROOT_SCRIPT
+        echo "set -e" >> $LOGO_FAKEROOT_SCRIPT # 腳本執(zhí)行出錯時(shí)立即退出
+        if [ "$RK_LOGO_FS_TYPE" = "ubi" ]; then # 判斷l(xiāng)ogo分區(qū)文件系統(tǒng)類型
+            # UBI文件系統(tǒng):調(diào)用mkimage工具生成帶指定參數(shù)的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文件系統(tǒng)(本文為ext2):生成基礎(chǔ)logo鏡像
+            echo "$MKIMAGE $LOGO_DIR $ROCKDEV/logo.img $RK_LOGO_FS_TYPE " >> $LOGO_FAKEROOT_SCRIPT
+        fi
+        chmod a+x $LOGO_FAKEROOT_SCRIPT # 賦予腳本可執(zhí)行權(quán)限
+        $FAKEROOT_TOOL -- $LOGO_FAKEROOT_SCRIPT # 執(zhí)行腳本生成鏡像
+        rm -f $LOGO_FAKEROOT_SCRIPT # 清理臨時(shí)腳本
+    else
+        echo "warning: $LOGO_DIR not found!" # 目錄不存在時(shí)輸出警告
+    fi
+fi
+
 if [ -f $UBOOT_IMG ]
 then
     echo -n "create uboot.img..."

(3)添加logo分區(qū)配置

device/rockchip/ok3568/BoardConfig-ok3568.mk

作用:精準(zhǔn)配置logo分區(qū)的文件系統(tǒng)類型、目錄名稱、分區(qū)大小等核心參數(shù)。

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分區(qū)文件系統(tǒng)類型(與掛載配置一致為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分區(qū)核心配置
+export RK_LOGO_DIR=logo_normal # logo文件存放目錄(需與實(shí)際創(chuàng)建的文件夾名稱一致)
+export RK_LOGO_PARTITION_SIZE=0x0000a000 # logo分區(qū)大?。ㄒ?12字節(jié)存儲塊為單位:0x0000a000×512=20MB)
 #misc image
 export RK_MISC=wipe_all-misc.img
 #choose enable distro module

(4)修改eMMC分區(qū)表

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

作用:在eMMC分區(qū)表中新增20M大小的logo分區(qū),同步微調(diào)userdata分區(qū)的起始地址,有效規(guī)避分區(qū)重疊問題。

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分區(qū):大小0x0000a000(20MB),起始地址0x00c78000(接續(xù)oem分區(qū));userdata分區(qū)起始地址調(diào)整為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
分區(qū)表調(diào)整說明

分區(qū)表的修改需結(jié)合實(shí)際硬件的eMMC容量靈活調(diào)整,確保配置參數(shù)與硬件規(guī)格高度適配。詳細(xì)操作規(guī)范可參考官方文檔。

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

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

作用:將自動化生成的logo.img鏡像納入固件打包列表,確保固件燒錄過程中,logo鏡像可同步寫入eMMC的logo分區(qū)。

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 創(chuàng)建開機(jī)自啟腳本

(1)新建腳本文件

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

腳本功能:系統(tǒng)開機(jī)后,自動檢測U盤內(nèi)指定路徑的logo圖片,若成功檢測到目標(biāo)圖片,將自動完成logo鏡像的生成與logo分區(qū)的燒錄操作,同時(shí)創(chuàng)建標(biāo)志文件,有效避免重復(fù)燒錄。

Bash
#!/bin/sh
# 檢測U盤logo文件并燒錄的核心函數(shù)
check_sdcard() {
    while true; do # 循環(huán)檢測(確保U盤掛載完成)
        sleep 1 # 每秒檢測一次,降低系統(tǒng)資源占用
        # 判斷U盤是否掛載且存在指定logo文件夾(路徑需與U盤實(shí)際存放logo文件的文件夾路徑保持一致)
        if [[ -d "/run/media/sda1/Forlinx_logo" ]]; then
            cd "/run/media/sda1/Forlinx_logo"
            # 檢測標(biāo)志文件:存在則說明已燒錄,直接退出循環(huán)
            if [[ -f "Forlinx_logo_flag" ]]; then
                echo "Forlinx_logo_flag file exists, skip reflashing."
                break
            else
                # 檢測是否同時(shí)存在uboot和kernel階段的logo文件(二者缺一不可)
                if [[ -f "logo.bmp" && -f "logo_kernel.bmp" ]]; then
                    # 合并logo文件生成鏡像(uboot logo在前,kernel logo在后)
                    cat "logo.bmp" > "logo.img"
                    # 鏡像文件按512字節(jié)對齊(適配分區(qū)存儲塊大?。?                    truncate -s %512 "logo.img"
                    cat "logo_kernel.bmp" >> "logo.img"
                    # 燒錄鏡像至logo分區(qū)(of參數(shù)為logo分區(qū)設(shè)備節(jié)點(diǎn))
                    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" # 創(chuàng)建標(biāo)志文件,避免重復(fù)燒錄
                    break; # 燒錄完成,退出循環(huán)
                else
                    echo "Error: Missing logo.bmp or logo_kernel.bmp in the U盤."
                fi
            fi
        fi
    done
}
# 腳本入口:僅在start參數(shù)下執(zhí)行燒錄邏輯(符合init.d腳本規(guī)范)
case "$1" in
    start)
        check_sdcard & # 后臺運(yùn)行檢測函數(shù),不阻塞系統(tǒng)啟動
        ;;
    *)
        exit 1 # 非start參數(shù)直接退出
        ;;
esac

(2)賦予腳本可執(zhí)行權(quán)限

在終端執(zhí)行以下命令,為腳本配置可執(zhí)行權(quán)限:

Bash
# 賦予讀寫執(zhí)行權(quán)限(所有者、組用戶、其他用戶均有執(zhí)行權(quán)限)
chmod 775 S99logo
?
權(quán)限驗(yàn)證

執(zhí)行l(wèi)s -l S99logo命令,若輸出結(jié)果顯示為-rwxrwxr-x,則表明腳本權(quán)限配置成功,可正常運(yùn)行。

(3)編譯燒錄

所有修改配置操作全部完成后,執(zhí)行全編譯命令生成新固件,將新固件重新燒錄至開發(fā)板,即可完成整套logo替換功能的配置工作,具體編譯命令如下:

Bash
# 全編譯(根據(jù)實(shí)際編譯腳本調(diào)整,此處為常規(guī)命令示例)
make clean && make

3. 驗(yàn)證方法

3.1 準(zhǔn)備logo文件

要求項(xiàng) 詳細(xì)說明
格式要求 logo圖片需嚴(yán)格遵循 BMP格式(Rockchip平臺默認(rèn)支持該格式,確保logo正常顯示)
大小限制 兩張logo圖片的總大小不得超過20MB,與logo分區(qū)大小精準(zhǔn)匹配,避免因文件過大導(dǎo)致燒錄失敗
U-Boot階段logo logo.bmp(系統(tǒng)開機(jī)初期顯示,彰顯品牌標(biāo)識)
Kernel階段logo logo_kernel.bmp(系統(tǒng)啟動過程中顯示,保障啟動體驗(yàn)的連貫性)

3.2 U盤配置

1
創(chuàng)建文件夾

在U盤中新建文件夾,文件夾命名為Forlinx_logo,需與腳本中指定的路徑嚴(yán)格保持一致,且嚴(yán)格區(qū)分大小寫。

2
放入logo文件

將準(zhǔn)備就緒的兩張logo圖片(logo.bmp和logo_kernel.bmp),精準(zhǔn)放入該文件夾內(nèi)。

3
格式化U盤

確保U盤文件系統(tǒng)格式為 FAT32,該格式為RK3568開發(fā)板默認(rèn)支持的U盤格式。

3.3 燒錄驗(yàn)證步驟

步驟1將配置完成的U盤,平穩(wěn)插入開發(fā)板的USB接口,確保接觸良好、連接穩(wěn)定。

步驟2重啟開發(fā)板,需完成 兩次重啟操作:

  • 第一次重啟:RK3568開發(fā)板開機(jī)自啟腳本自動檢測到U盤內(nèi)的logo文件,同步完成logo鏡像的生成與logo分區(qū)的燒錄
  • 第二次重啟:系統(tǒng)成功讀取logo分區(qū)內(nèi)的新logo文件,順利完成開機(jī)logo的替換并穩(wěn)定生效
!
關(guān)鍵注意事項(xiàng)
  • 若需執(zhí)行硬重啟(即斷電重啟),需先在終端執(zhí)行sync命令,確保所有數(shù)據(jù)寫入完成
  • 驗(yàn)證成功后,U盤Forlinx_logo文件夾中會新增兩個(gè)文件:logo.img(自動生成的logo鏡像文件)和Forlinx_logo_flag(燒錄標(biāo)志文件)

3.4 重新替換logo

若RK3568開發(fā)板需更換新的開機(jī)logo,只需手動刪除U盤中Forlinx_logo文件夾內(nèi)的Forlinx_logo_flag文件,替換文件夾內(nèi)的logo.bmp和logo_kernel.bmp兩張圖片后,重復(fù)上述重啟驗(yàn)證步驟,即可完成新logo的替換,操作便捷高效。


咨詢立即獲得專屬報(bào)價(jià)

華北區(qū)負(fù)責(zé)人二維碼

華北區(qū)負(fù)責(zé)人

華東區(qū)負(fù)責(zé)人二維碼

華東區(qū)負(fù)責(zé)人

華南區(qū)負(fù)責(zé)人二維碼

華南區(qū)負(fù)責(zé)人

中西區(qū)負(fù)責(zé)人二維碼

中西區(qū)負(fù)責(zé)人

相關(guān)產(chǎn)品 >

  • FET3568-C核心板

    RK3568性能強(qiáng)而穩(wěn) 國產(chǎn)芯|飛凌嵌入式RK3568系列核心板,采用瑞芯微國產(chǎn)高性能AI處理器RK3568設(shè)計(jì)生產(chǎn),RK3568兼具CPU、GPU、NPU、VPU于一身,RK3568 性能、性價(jià)比在同類產(chǎn)品中具有較高優(yōu)勢,RK3568處理器是一款定位中高端的通用型SoC, 飛凌RK3568核心板主要面向工業(yè)互聯(lián)網(wǎng)、HMI、NVR存儲、車載中控、工業(yè)網(wǎng)關(guān)等領(lǐng)域。目前RK3568系列已經(jīng)批量穩(wěn)定出貨

    了解詳情
    FET3568-C核心板
  • OK3568-C開發(fā)板

    強(qiáng)而穩(wěn),國產(chǎn)芯,1Tops算力,多路高速接口|飛凌RK3568系列RK3568開發(fā)板基于國產(chǎn)工業(yè)級AI處理器RK3568四核64位Cortex-A55 處理器設(shè)計(jì)。RK3568作為國產(chǎn)化高性能處理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU達(dá)到1Tops,飛凌RK3568系列核心板提供瑞芯微RK3568規(guī)格書_datasheet_數(shù)據(jù)手冊_原理圖等,


    了解詳情
    OK3568-C開發(fā)板

推薦閱讀 換一批 換一批