RK3568開發(fā)板 Buildroot:免編譯 LOGO 替換 獨立分區(qū)實現(xiàn)方案
Forlinx
2026-02-11 16:45:00
rk3568
rk3568開發(fā)板
OK3568-C開發(fā)板LOGO替換技術(shù)方案
基于Buildroot 4.19.206系統(tǒng)的獨立分區(qū)方案,實現(xiàn)無需重新編譯全量源碼的便捷LOGO替換機制
1. 方案概述
本文所提供的源碼修改內(nèi)容,均以 patch格式標準化呈現(xiàn)(便于團隊復用、版本管控及協(xié)同開發(fā)),其核心實現(xiàn)邏輯清晰明確:
在系統(tǒng)鏡像中新增獨立logo分區(qū),實現(xiàn)LOGO數(shù)據(jù)的隔離存儲與管理,避免與系統(tǒng)其他分區(qū)產(chǎn)生沖突。
創(chuàng)建開機自啟腳本,自動檢測U盤內(nèi)指定路徑的logo圖片,實現(xiàn)自動化鏡像生成與燒錄。
無需重新編譯全量源碼,通過簡單的重啟操作即可完成開機LOGO替換,簡化操作流程。
Patch格式標準化呈現(xiàn),便于團隊復用、版本管控及協(xié)同開發(fā),確保技術(shù)方案的可維護性。
2. 源碼修改方法
經(jīng)實際測試驗證,部分用戶在操作過程中,因OK3568-linux-source/device/rockchip/路徑下缺失logo/logo_normal文件夾,導致全編譯流程異常終止。
2.1 解決措施
針對上述問題,需手動創(chuàng)建對應(yīng)空文件夾,且文件夾路徑需與后續(xù)配置參數(shù)嚴格保持一致,確保編譯流程順暢:
# 賦予讀寫執(zhí)行權(quán)限(所有者、組用戶、其他用戶均有執(zhí)行權(quán)限) mkdir -p logo/logo_normal
2.2 虛擬機源碼修改
(1)配置logo分區(qū)掛載
buildroot/board/rockchip/ok3568/fs-overlay-recovery/etc/fstab
作用:新增logo分區(qū)掛載規(guī)則,將logo分區(qū)精準掛載至/mnt/logo目錄,為系統(tǒng)訪問logo分區(qū)搭建便捷通道。
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é)點為/dev/block/by-name/logo,掛載點/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鏡像生成邏輯,實現(xiàn)logo.img鏡像的自動化構(gòu)建,同時將其納入固件包。
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í)行出錯時立即退出
+ 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 # 清理臨時腳本
+ else
+ echo "warning: $LOGO_DIR not found!" # 目錄不存在時輸出警告
+ fi
+fi
+
if [ -f $UBOOT_IMG ]
then
echo -n "create uboot.img..."
(3)添加logo分區(qū)配置
device/rockchip/ok3568/BoardConfig-ok3568.mk
作用:精準配置logo分區(qū)的文件系統(tǒng)類型、目錄名稱、分區(qū)大小等核心參數(shù)。
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文件存放目錄(需與實際創(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 --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
分區(qū)表的修改需結(jié)合實際硬件的eMMC容量靈活調(diào)整,確保配置參數(shù)與硬件規(guī)格高度適配。詳細操作規(guī)范可參考官方文檔。
(5)添加logo鏡像到固件包
tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file
作用:將自動化生成的logo.img鏡像納入固件打包列表,確保固件燒錄過程中,logo鏡像可同步寫入eMMC的logo分區(qū)。
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)建開機自啟腳本
(1)新建腳本文件
buildroot/board/rockchip/ok3568/fs-overlay/etc/init.d/S99logo
腳本功能:系統(tǒng)開機后,自動檢測U盤內(nèi)指定路徑的logo圖片,若成功檢測到目標圖片,將自動完成logo鏡像的生成與logo分區(qū)的燒錄操作,同時創(chuàng)建標志文件,有效避免重復燒錄。
#!/bin/sh
# 檢測U盤logo文件并燒錄的核心函數(shù)
check_sdcard() {
while true; do # 循環(huán)檢測(確保U盤掛載完成)
sleep 1 # 每秒檢測一次,降低系統(tǒng)資源占用
# 判斷U盤是否掛載且存在指定logo文件夾(路徑需與U盤實際存放logo文件的文件夾路徑保持一致)
if [[ -d "/run/media/sda1/Forlinx_logo" ]]; then
cd "/run/media/sda1/Forlinx_logo"
# 檢測標志文件:存在則說明已燒錄,直接退出循環(huán)
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字節(jié)對齊(適配分區(qū)存儲塊大?。? truncate -s %512 "logo.img"
cat "logo_kernel.bmp" >> "logo.img"
# 燒錄鏡像至logo分區(qū)(of參數(shù)為logo分區(qū)設(shè)備節(jié)點)
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)建標志文件,避免重復燒錄
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 & # 后臺運行檢測函數(shù),不阻塞系統(tǒng)啟動
;;
*)
exit 1 # 非start參數(shù)直接退出
;;
esac
(2)賦予腳本可執(zhí)行權(quán)限
在終端執(zhí)行以下命令,為腳本配置可執(zhí)行權(quán)限:
# 賦予讀寫執(zhí)行權(quán)限(所有者、組用戶、其他用戶均有執(zhí)行權(quán)限) chmod 775 S99logo
執(zhí)行l(wèi)s -l S99logo命令,若輸出結(jié)果顯示為-rwxrwxr-x,則表明腳本權(quán)限配置成功,可正常運行。
(3)編譯燒錄
所有修改配置操作全部完成后,執(zhí)行全編譯命令生成新固件,將新固件重新燒錄至開發(fā)板,即可完成整套logo替換功能的配置工作,具體編譯命令如下:
# 全編譯(根據(jù)實際編譯腳本調(diào)整,此處為常規(guī)命令示例) make clean && make
3. 驗證方法
3.1 準備logo文件
| 要求項 | 詳細說明 |
|---|---|
| 格式要求 | logo圖片需嚴格遵循 BMP格式(Rockchip平臺默認支持該格式,確保logo正常顯示) |
| 大小限制 | 兩張logo圖片的總大小不得超過20MB,與logo分區(qū)大小精準匹配,避免因文件過大導致燒錄失敗 |
| U-Boot階段logo | logo.bmp(系統(tǒng)開機初期顯示,彰顯品牌標識) |
| Kernel階段logo | logo_kernel.bmp(系統(tǒng)啟動過程中顯示,保障啟動體驗的連貫性) |
3.2 U盤配置
在U盤中新建文件夾,文件夾命名為Forlinx_logo,需與腳本中指定的路徑嚴格保持一致,且嚴格區(qū)分大小寫。
將準備就緒的兩張logo圖片(logo.bmp和logo_kernel.bmp),精準放入該文件夾內(nèi)。
確保U盤文件系統(tǒng)格式為 FAT32,該格式為RK3568開發(fā)板默認支持的U盤格式。
3.3 燒錄驗證步驟
步驟1將配置完成的U盤,平穩(wěn)插入開發(fā)板的USB接口,確保接觸良好、連接穩(wěn)定。
步驟2重啟開發(fā)板,需完成 兩次重啟操作:
- 第一次重啟:RK3568開發(fā)板開機自啟腳本自動檢測到U盤內(nèi)的logo文件,同步完成logo鏡像的生成與logo分區(qū)的燒錄
- 第二次重啟:系統(tǒng)成功讀取logo分區(qū)內(nèi)的新logo文件,順利完成開機logo的替換并穩(wěn)定生效
- 若需執(zhí)行硬重啟(即斷電重啟),需先在終端執(zhí)行sync命令,確保所有數(shù)據(jù)寫入完成
- 驗證成功后,U盤Forlinx_logo文件夾中會新增兩個文件:logo.img(自動生成的logo鏡像文件)和Forlinx_logo_flag(燒錄標志文件)
3.4 重新替換logo
若RK3568開發(fā)板需更換新的開機logo,只需手動刪除U盤中Forlinx_logo文件夾內(nèi)的Forlinx_logo_flag文件,替換文件夾內(nèi)的logo.bmp和logo_kernel.bmp兩張圖片后,重復上述重啟驗證步驟,即可完成新logo的替換,操作便捷高效。
咨詢立即獲得專屬報價
華北區(qū)負責人
華東區(qū)負責人
華南區(qū)負責人
中西區(qū)負責人
相關(guān)產(chǎn)品 >
-
FET3568-C核心板
RK3568性能強而穩(wěn) 國產(chǎn)芯|飛凌嵌入式RK3568系列核心板,采用瑞芯微國產(chǎn)高性能AI處理器RK3568設(shè)計生產(chǎn),RK3568兼具CPU、GPU、NPU、VPU于一身,RK3568 性能、性價比在同類產(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)定出貨
了解詳情
-
OK3568-C開發(fā)板
強而穩(wěn),國產(chǎn)芯,1Tops算力,多路高速接口|飛凌RK3568系列RK3568開發(fā)板基于國產(chǎn)工業(yè)級AI處理器RK3568四核64位Cortex-A55 處理器設(shè)計。RK3568作為國產(chǎn)化高性能處理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU達到1Tops,飛凌RK3568系列核心板提供瑞芯微RK3568規(guī)格書_datasheet_數(shù)據(jù)手冊_原理圖等,
了解詳情


