保姆级教程:在Firefly RK3568开发板上将串口波特率从1500000改为115200(含uboot、kernel、ddr bin全流程)
Firefly RK3568开发板串口波特率修改全流程指南刚拿到Firefly RK3568开发板时不少开发者会遇到一个头疼的问题——默认串口波特率设置为1500000而大多数调试工具如SecureCRT、MobaXterm并不支持这么高的波特率导致终端显示乱码或无法连接。这个问题看似简单但实际涉及uboot、kernel和ddr bin三个关键环节的修改特别是ddr bin这个容易被忽略的前置引导环节。本文将带你完整走通整个修改流程从原理到实操一步不落。1. 理解RK3568的启动流程与串口配置层级在动手修改之前我们需要先理清Rockchip RK3568芯片的启动流程以及串口配置在不同阶段的生效机制。RK3568采用典型的嵌入式系统启动链BOOTROM → ddr bin → Miniloader → TRUST → U-BOOT → KERNEL每个阶段都有自己的串口初始化逻辑其中三个关键环节需要特别关注ddr bin阶段这是Rockchip提供的闭源二进制负责DDR内存初始化。虽然文档中很少提及但这个阶段已经会初始化串口如果与后续阶段波特率不匹配可能导致早期调试信息乱码。U-Boot阶段开源引导程序通常通过CONFIG_BAUDRATE配置串口参数。Kernel阶段通过设备树(dts)中的rockchip,baudrate参数配置串口。提示修改波特率时必须确保这三个阶段的配置一致否则可能出现部分阶段能正常输出而其他阶段乱码的情况。2. 准备工作与环境搭建开始修改前请确保已准备好以下环境硬件准备Firefly RK3568开发板USB转串口调试模块推荐使用CP2102/CH340等稳定型号配套的连接线注意RX/TX交叉连接软件准备最新版Firefly SDK包含uboot、kernel和rkbin串口调试工具推荐使用picocom或minicom交叉编译工具链建议使用官方推荐的aarch64-linux-gnu-源码结构firefly_sdk/ ├── u-boot # U-Boot源码 ├── kernel # Linux内核源码 └── rkbin # Rockchip闭源二进制工具和固件检查当前波特率是否确实为1500000stty -F /dev/ttyUSB0 1500000 picocom -b 1500000 /dev/ttyUSB03. 修改U-Boot阶段的波特率配置U-Boot作为主要引导程序其串口配置相对直观。我们需要修改两个关键文件修改defconfig文件 找到板级配置文件通常位于u-boot/configs/目录下。对于Firefly RK3568文件名为firefly-rk3568_defconfig。vim u-boot/configs/firefly-rk3568_defconfig找到或添加以下配置CONFIG_BAUDRATE115200验证修改 重新编译U-Boot并检查配置是否生效make firefly-rk3568_defconfig make menuconfig在→ Boot options → Default baud rate中确认已选中115200。编译测试make -j$(nproc)烧写测试前建议先通过./tools/mkimage -l u-boot.img检查镜像是否包含正确的配置。4. 修改Kernel设备树中的串口配置Linux内核阶段的串口配置通过设备树管理。RK3568的设备树文件通常位于kernel/arch/arm64/boot/dts/rockchip/目录下。定位串口节点 打开主设备树文件如rk3568-linux.dtsi找到uart节点uart2 { rockchip,baudrate 1500000; // 其他配置... };修改波特率参数 将rockchip,baudrate改为115200uart2 { rockchip,baudrate 115200; // 其他配置保持不变... };验证与编译 重新编译设备树并检查修改make dtbs fdtdump arch/arm64/boot/dts/rockchip/rk3568-firefly.dtb | grep baudrate5. 处理ddr bin中的波特率配置最易忽略的关键步骤ddr bin是Rockchip平台特有的闭源二进制负责早期DDR初始化。如果只修改uboot和kernel而忽略ddr bin会导致引导早期输出乱码。定位ddr bin配置文件 在rkbin工具目录中找到ddrbin参数文件vim rkbin/tools/ddrbin_param.txt修改波特率参数 找到uart相关配置并修改- uart baudrate1500000 uart baudrate115200重新生成ddr bin 使用rkbin提供的工具重新打包cd rkbin/tools ./ddrbin_tool ddrbin_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.10.bin更新loader镜像 检查RKBOOT/RK3568MINIALL.ini确保指向新的ddr bin[LOADER_OPTION] NUM2 LOADER1FlashData LOADER2FlashBoot FlashDatabin/rk35/rk3568_ddr_1560MHz_v1.10.bin FlashBootbin/rk35/rk356x_spl_v1.11.bin6. 完整固件编译与烧写验证完成所有修改后需要重新编译完整固件编译U-Bootcd u-boot ./make.sh rk3568编译Kernelcd kernel make firefly_linux_defconfig make -j$(nproc) Image dtbs打包完整固件 使用Firefly提供的打包工具./build.sh updateimg烧写与测试 使用RKDevTool或upgrade_tool烧写新固件后分别测试ddr bin阶段输出需连接串口观察最早期的输出U-Boot阶段输出Kernel启动阶段输出正确的输出应该类似DDR Version V1.10 20211220 In U-Boot 2021.10 (Mar 20 2023 - 15:32:46 0800)7. 常见问题与调试技巧即使按照流程操作仍可能遇到各种问题。以下是几个典型场景的解决方案早期输出仍为乱码确认ddr bin是否确实更新检查文件时间戳尝试降低串口波特率到9600看是否能捕捉到部分正确输出U-Boot阶段无输出# 在U-Boot源码中启用调试 echo CONFIG_DEBUG_UARTy configs/firefly-rk3568_defconfig波特率不稳定检查时钟配置特别是cru相关节点在设备树中添加串口稳定性参数uart2 { rockchip,baudrate 115200; rockchip,uart-has-fifo; rockchip,uart-fifo-depth 64; };多串口配置冲突 如果系统有多个串口确保调试用的串口是主控制台chosen { stdout-path serial2:115200n8; };在实际项目中我遇到过最棘手的情况是修改ddr bin后波特率仍然不对最终发现是rkbin工具版本不匹配导致参数未正确应用。解决方法是从官方获取最新版本的rkbin仓库重新操作。