(全网首发)RK3506B修改调试串口波特率功率攻略
前言
本文写于2025年9月7日上午12:05,瑞芯微的SDK使用的UBoot为2017年的特供版,Linux则是移植了Linux 6.1.99+版本,也就是采用了全新特性了Linux。
本篇博客希望给出RK3506B的修改调试串口波特率功率的方案
为什么要做?
为什么要改?答案是RK系列提供的SDK源码包中,默认设置的UART的波特率是1500000,也就是1.5M,这个速率并非一个非常常规的波特率,查阅设备树和文档,可以找到RK家的UART芯片支持115200和1500000Baud Rate的输出。这也就意味着咱们需要动动手修改一下串口的波特率(笔者是XShell使用用户,不支持自定义咱们的波特率)
结合启动流程,说一说咱们需要修改该哪一些地方
RK3506是一个大家伙,这里,我们的启动会比IMX6ULL实际上还要再复杂一点,这里简单的说一说。
首先,我们第一个动作就是执行固化在SoC内部的BootROM中的初始化代码,笔者在之前的博客提到过(嵌入式八股文中的嵌入式Linux启动流程),咱们的Stage中如果硬件非常复杂,从ROM Boot到UBoot的流程是分阶段的,这里就是这个阶段。
BOOTROM的主要任务就是开启基本的时钟,按照 启动模式(Boot Mode) 从不同的介质(如 eMMC、SPI Nor、SD 卡、NAND、USB OTG)中查找并加载下一阶段引导程序(通常是 SPL/BL2)。然后过签名验证,保证芯片的安全启动。
咱们的下一步就是进一步加载Bootloader,也就是咱们的UBoot,之后的流程就会变得很清楚了,那就是从UBoot再启动到Linux。
上电复位
↓
BootROM (片上固化)
↓
SPL / BL2 (初始化内存,加载下一级) ⭐
↓
TF-A (BL31: 安全世界初始化)
↓
U-Boot (BL33: 完整Bootloader,加载内核) ⭐
↓
Linux Kernel (驱动 + 根文件系统) ⭐
↓
用户空间 (init/systemd → 应用层)
一共看来,我们实际上要改的是三处地方。BootBin,U-Boot和Linux三处的串口初始化配置。我们下面就来说说。
SPL阶段的Boot修改
rkbin负责这一阶段的初始化工作。RK家在这里的代码是闭源的,咱们只能用人家的代码搞。
Step1 确定你使用的Chip是啥 + 修改波特率
笔者使用的是RK3506B这个配置,所以呢,咱们实际上看的时候,也要去看对应的ini文件,在SDK目录下的:
rkbin/RKBOOT/RK3506BMINIALL.ini
这里我们就能看到我们实际上的bin文件指向的是哪一个。一般都是第一个bin文件,具体如何查看往上的博客教授的非常详细了,这里不再重复。总之查看的就是path指向的bin文件,大致是rk3506b_ddr_xxx.bin文件,这个文件每个人都可能不一样,自己需要查看。
在这里,我们定位到(快速定位的办法是vim中的/+文本定位到文本),我们搜索baudrate,在=后直接写上115200,这样我们就修改好了波特率了。
下一步,我们就需要使用ddrbin_tool这个工具重新修订好新的SPL加载可重定位文件。
./ddrbin_tool rk3506 ddrbin_param.txt ../bin/rk35/xxx.bin # 这个地方填上你刚刚查到的bin文件路径
然后就OK了。
Step2 修改UBoot的参数
这个官方没找到文档,我是类比RK3588的办法,在我们的rk3506_defconfig文件中,添加了一个CONFIG_BAUDRATE的配置项,设置成115200,直接加就行
Step3 修改Linux的参数
RK3506B的defconfig并不独立,实际上他依赖于rk3502-evb1-v10.dtsi文件中的配置,教您一招咋找,设备树的编译跟咱们的C语言工程编译是类似的,因此,咱们的中间件中是有出现合并后的tmp文件的,在dts文件下(RK3506B是arch/arm/boot/dts下)
grep -rw "1500000" . | grep rk3506
我们检索当前目录下的所有设备树文件,筛出来存在1500000这个全词的行数和文件所在位置后,且确保属于rk3506的配置就好,这个时候我们就能看到tmp文件存在设置的,只是他实际上复用了其他板子的配置,这个时候再依次顺藤摸瓜,找到我们的RK3506B的波特率是由rk3502-evb1-v10.dtsi文件引入的,之后我们再编译的时候,就可以完成后再次执行:
grep -rw "115200" . | grep rk3506
看我们的tmp文件是否修改成功。
笔者修改的时是rockchip, baudrate那一行改成115200,原本是1500000。
完结
到这里我们的工作就结束了。现在就可以尝试一下了!