默认情况下,RK3566平台的调试串口(UART2)波特率设置为1.5Mbps(1500000)。但在某些硬件调试场景中,我们可能需要将其调整为更通用的115200波特率。本文将详细介绍在Orangepi 3B开发板上,修改DDR初始化代码、U-Boot及内核设备树,以完成此项配置变更的完整步骤。
准备工作
在开始修改前,需要准备好相应的开发环境与源码。本次操作涉及以下关键文件:
- DDR配置:
rk3566_ddr_1056MHz_v1.10.bin
- 文件来源:可通过追踪
orangepi-build-next 构建流程,在 external/cache/sources/rkbin-tools/rk35/ 目录下找到,或从Firefly ROC-RK3566-PC等相近平台的SDK中获取。
- U-Boot源码:需能进行配置修改与编译。
- 内核源码:用于修改设备树(DTB)文件。
修改步骤
1. 修改DDR初始化二进制文件
首先需要修改DDR初始化阶段的串口配置。这里使用 ddrbin_tool 工具进行操作。
- 将
rk3566_ddr_1056MHz_v1.10.bin 与 ddrbin_tool 工具置于同一目录(例如 rkbin/tools)。
- 创建或编辑
ddrbin_param.txt 参数文件,确保其中包含 uart baudrate=115200 配置项。
- 执行以下命令,生成新的DDR初始化文件:
./ddrbin_tool rk3566 ddrbin_param.txt rk3566_ddr_1056MHz_v1.10.bin
执行成功后,rk3566_ddr_1056MHz_v1.10.bin 文件即被更新。
注:ddrbin_tool 工具可能需要从相关平台的SDK中获取。
2. 配置与编译U-Boot
接下来需要修改U-Boot的串口波特率配置。
-
修改配置:
打开U-Boot配置文件。你可以通过 make menuconfig 在图形界面中修改,或直接编辑默认配置文件(如 configs/orangepi-3b-rk3566_defconfig),确保 CONFIG_BAUDRATE 的值被设置为 115200。
-
编译U-Boot:
配置完成后,使用交叉编译工具链进行编译。以下是一个编译示例:
export CROSS_COMPILE=/path/to/your/gcc-arm-9.2-.../bin/aarch64-none-linux-gnu-
make BL31=/path/to/rk3568_bl31_v1.28.elf spl/u-boot-spl.bin u-boot.dtb u-boot.itb -j12
关于如何搭建与使用交叉编译环境,可以参考 Linux系统管理与运维 相关的资料。
-
打包idbloader:
使用 mkimage 工具,将修改后的DDR bin文件与编译好的SPL打包:
tools/mkimage -n rk3568 -T rksd -d /path/to/modified_rk3566_ddr_1056MHz_v1.10.bin:spl/u-boot-spl.bin idbloader.img
生成 idbloader.img 和 u-boot.itb 文件。
-
烧写至设备:
将生成的两个文件拷贝到开发板,并写入eMMC存储:
dd if=idbloader.img of=/dev/mmcblk0 seek=64 conv=notrunc status=none
dd if=u-boot.itb of=/dev/mmcblk0 seek=16384 conv=notrunc status=none
3. 修改内核设备树(DTB)
最后一步是修改Linux内核的设备树源文件,以配置内核阶段的调试串口。
-
定位并编辑设备树源文件:
打开内核源码中的设备树文件,例如:arch/arm64/boot/dts/rockchip/rk3568-linux.dtsi。
找到 fiq_debugger 节点,将其 rockchip,baudrate 属性值从 <1500000> 修改为 <115200>。
-
修改内容示例:
fiq_debugger: fiq-debugger {
compatible = "rockchip,fiq-debugger";
rockchip,serial-id = <2>;
rockchip,wake-irq = <0>;
/* If enable uart uses irq instead of fiq */
rockchip,irq-mode-enable = <1>;
/* rockchip,baudrate = <1500000>; */ /* 注释掉原配置 */
rockchip,baudrate = <115200>; /* 修改为115200 */
interrupts = <GIC_SPI 252 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&uart2m0_xfer>;
status = "okay";
};
设备树是描述硬件连接和配置的重要机制,深入理解其语法有助于进行更复杂的驱动定制,相关内容可查阅 网络与操作系统底层 知识。
-
编译并替换DTB:
重新编译内核设备树,将生成的 rk3566-orangepi-3b-v2.dtb(或对应名称的dtb文件)替换到开发板的 /boot/dtb/rockchip/ 目录下。
完成以上三个步骤后,重启开发板,调试串口的波特率即应从1.5Mbps成功变更为115200bps。请注意,此修改涉及系统底层引导的多个阶段,确保每一步的修改和烧写都正确无误。
|