RK3566开发板Recovery分区实战:手把手教你扩展SD卡镜像并烧录recovery.img

张开发
2026/4/12 12:11:11 15 分钟阅读

分享文章

RK3566开发板Recovery分区实战:手把手教你扩展SD卡镜像并烧录recovery.img
RK3566开发板Recovery分区深度实践从分区规划到系统部署全解析1. 开发环境与硬件准备在开始Recovery分区的实战操作前我们需要确保开发环境配置正确。以下是基于Orange Pi 3B开发板的硬件规格和开发环境要求硬件配置清单主控芯片Rockchip RK3566四核Cortex-A55处理器内存2GB LPDDR4存储32GB eMMC支持SD卡启动显示输出HDMI 2.0接口扩展接口40pin GPIO含UART、I2C、SPI等开发主机软件要求Ubuntu 20.04/22.04 LTS推荐交叉编译工具链aarch64-linux-gnu-gcc必要工具包sudo apt install git make gcc bison flex libssl-dev libncurses-dev parted开发板连接示意图[USB转串口] ---- [UART调试口] | [TF卡槽] ---- [已烧录镜像的SD卡] | [电源输入] ---- [5V/2A适配器]2. Recovery系统架构解析2.1 Recovery镜像组成要素RK3566的Recovery系统采用FITFlattened Image Tree格式包含三个核心组件内核镜像压缩的Linux内核Image.gz设备树文件.dtb内核配置需启用RAM磁盘支持CONFIG_BLK_DEV_RAMy CONFIG_BLK_DEV_RAM_COUNT1 CONFIG_BLK_DEV_RAM_SIZE131072根文件系统基于Buildroot构建的轻量级ramdisk典型目录结构/bin # 基础命令 /etc # 配置文件 /sbin # 系统管理命令 /usr # 用户程序 /var # 可变数据设备树配置需适配开发板硬件版本如rk3566-orangepi-3b.dtb或rk3566-orangepi-3b-v2.dtb2.2 存储分区规划推荐的分区方案针对32GB存储设备分区名称类型GUID大小挂载点说明bootfsBC13C2FF-59E6...1GB/bootFAT32格式存放内核和引导文件recoveryB2F2DCBB-03C4...128MB-Recovery系统镜像image169D9DD18-36BE...4GB/oem出厂系统备份只读image2A2092B92-AF29...4GB/userdata用户数据分区rootfs0FC63DAF-8483...剩余空间/根文件系统分区表生成命令示例sudo sgdisk -n 1:61440:2158591 -t 1:BC13C2FF-59E6-4262-A352-B275FD6F7172 -c 1:bootfs \ -n 2:2158592:2420735 -t 2:B2F2DCBB-03C4-472F-B79C-942895CEC1A9 -c 2:recovery \ -n 3:2420736:10809343 -t 3:69D9DD18-36BE-4631-9EBB-78F05FE3217F -c 3:image1 \ -n 4:10809344:19197951 -t 4:A2092B92-AF29-4760-8E68-7A201922573B -c 4:image2 \ -n 5:19197952: -t 5:0FC63DAF-8483-4772-8E79-3D69D8477DE4 -c 5:rootfs \ /dev/sdX3. 构建Recovery系统镜像3.1 内核配置与编译获取内核源码git clone https://github.com/orangepi-xunlong/orangepi-build.git cd orangepi-build/kernel/orange-pi-5.10-rk35xx关键配置选项make menuconfig确保启用以下选项Device Drivers → Block devices → RAM block device support General setup → Initial RAM filesystem and RAM disk support编译命令./build.sh BOARDorangepi3b BRANCHlegacy BUILD_OPTkernel3.2 Buildroot根文件系统构建基础配置wget https://buildroot.org/downloads/buildroot-2024.02.4.tar.gz tar xzf buildroot-2024.02.4.tar.gz cd buildroot-2024.02.4 make menuconfig关键配置项Target options → ARM64 (AArch64) System configuration → Enable root login with password Filesystem images → initial RAM filesystem linked into linux kernel自定义配置 创建board/rockchip/rk356x/fs-overlay目录添加/etc/network/interfaces网络配置/etc/init.d/rcS启动脚本/usr/bin/recovery-tool自定义恢复工具编译命令make -j$(nproc)3.3 镜像打包脚本详解创建mk-fitimage.sh脚本实现自动化打包#!/bin/bash TARGET_IMGrecovery.img ITSboot4recovery.its # 组件路径配置 KERNEL_IMGImage.gz RAMDISK_IMGramdisk.gz KERNEL_DTBrk3566-orangepi-3b.dtb KERNEL_DTB_V2rk3566-orangepi-3b-v2.dtb # 生成临时ITS文件 TMP_ITS$(mktemp) sed -e s|KERNEL_DTB|$(realpath $KERNEL_DTB)| \ -e s|KERNEL_DTB_V2|$(realpath $KERNEL_DTB_V2)| \ -e s|KERNEL_IMG|$(realpath $KERNEL_IMG)| \ -e s|RAMDISK_IMG|$(realpath $RAMDISK_IMG)| \ $ITS $TMP_ITS # 使用mkimage工具打包 mkimage -f $TMP_ITS -E -p 0x800 $TARGET_IMG rm -f $TMP_ITS4. U-Boot定制与烧录4.1 启动流程改造修改U-Boot源码arch/arm/mach-rockchip/boot_mode.c实现GPIO检测int rockchip_get_boot_mode(void) { struct rockchip_gpio_regs *regs (void *)GPIO3_BASE; CLRBITS_LE32(regs-swport_ddr, BIT(27)); // 设置GPIO3_D3为输入 if (readl(regs-ext_port) BIT(27)) { env_set(update_mode, recovery); return BOOT_MODE_RECOVERY; } return BOOT_MODE_NORMAL; }4.2 关键环境变量变量名默认值说明bootcmdrun distro_bootcmd默认启动命令boot_targetsmmc0 mmc1启动设备顺序update_modenormal恢复模式标志4.3 烧录方法对比SD卡烧录sudo dd ifOrangepi3b_1.0.6_ubuntu_jammy_server_linux5.10.160.img of/dev/sdX bs4M statusprogress单独烧录Recovery分区# 通过U-Boot命令行 tftp 0x10000000 recovery.img mmc write 0x10000000 0x20F000 0x40000 # 在Linux系统中 sudo dd ifrecovery.img of/dev/mmcblk1p25. 实战问题排查指南5.1 常见错误与解决方案问题现象可能原因解决方案无法进入Recovery模式GPIO检测失败检查硬件连接和U-Boot代码内核panic设备树不匹配确认dtb文件与硬件版本对应根文件系统挂载失败ramdisk损坏重新构建并验证ramdisk.gz分区识别错误GPT表损坏使用sgdisk重新生成分区表5.2 调试技巧U-Boot调试setenv bootargs earlyconuart8250,mmio32,0xfe660000 consolettyFIQ0 saveenv内核日志获取dmesg | grep -i error cat /proc/cmdline存储设备检查lsblk -o NAME,PARTLABEL,PARTUUID,LABEL blkid6. 扩展应用场景6.1 系统升级方案设计双系统切换流程进入Recovery模式验证新镜像签名将image2分区内容写入rootfs更新引导配置重启进入新系统升级脚本示例#!/bin/bash UPDATE_IMG/userdata/update.img # 验证镜像 verify_image $UPDATE_IMG || exit 1 # 解压镜像到临时目录 mkdir -p /tmp/update unsquashfs -d /tmp/update $UPDATE_IMG # 写入分区 dd if/tmp/update/rootfs.img of/dev/mmcblk1p5 bs4M # 更新环境变量 fw_setenv bootpart 5 sync6.2 硬件诊断功能集成可在Recovery系统中集成以下诊断工具内存测试memtester 512M 1存储健康检查smartctl -a /dev/mmcblk0网络连通性测试ping -c 4 8.8.8.87. 性能优化建议内核裁剪移除不需要的驱动模块禁用调试符号CONFIG_DEBUG_INFOn启动加速CONFIG_BOOTDELAY1 CONFIG_FASTBOOTy文件系统优化tune2fs -o journal_data_writeback /dev/mmcblk1p2通过本方案的完整实施开发者可以获得一个稳定可靠的Recovery系统为RK3566开发板的维护和升级提供坚实基础。实际部署时建议根据具体硬件版本调整设备树和分区方案并通过自动化测试验证关键功能。

更多文章