【RK3588】正点原子开发板调试串口转普通串口的实战指南

张开发
2026/6/9 11:25:14 15 分钟阅读
【RK3588】正点原子开发板调试串口转普通串口的实战指南
1. 为什么需要将调试串口转为普通串口很多开发者在使用正点原子RK3588开发板时都会遇到一个实际需求如何把默认的调试串口UART2释放出来作为普通串口使用。这个问题看似简单但背后有几个关键考量首先调试串口在开发阶段确实非常有用它能帮助我们快速定位系统启动问题、查看内核日志。但到了产品量产阶段很多客户根本不需要这个功能反而更需要额外的串口资源来连接其他设备。比如我最近做的一个智能家居网关项目就需要用这个串口连接Zigbee模块。其次RK3588的串口资源虽然丰富但在复杂系统中经常不够用。UART2作为调试串口默认被占用相当于白白浪费了一个宝贵的硬件资源。特别是在需要连接多个串口设备如GPS、4G模块、传感器等的场景下每个串口都显得格外珍贵。最后从系统优化角度考虑关闭调试功能可以减少内核开销。调试串口会持续输出系统日志这在生产环境中不仅没有必要还可能影响系统性能和安全。我在实际测试中发现关闭调试串口后系统内存占用能减少约3%-5%。2. 硬件准备与环境确认在开始修改之前我们需要做好以下准备工作硬件方面确保你使用的是正点原子ATK-DLRK3588开发板。这个开发板的UART2接口位于板载的40pin排针上具体引脚定义可以在官方原理图中找到。我建议准备一个USB转TTL模块方便后续测试修改后的串口功能。软件环境需要特别注意如果是Android系统需要准备好完整的Android SDK开发环境如果是Linux系统则需要Linux SDK建议使用Ubuntu 20.04或更高版本作为开发主机系统验证当前调试串口是否正常工作很简单只需要adb shell cat /proc/cmdline查看输出中是否包含consolettyFIQ0这样的参数。如果有说明当前正在使用UART2作为调试串口。3. 修改设备树配置Android/Linux双平台设备树修改是整个过程中最关键的一步需要分别处理Android和Linux两个平台。我建议先备份原始文件避免操作失误导致系统无法启动。3.1 禁用fiq-debugger节点对于Android平台vi kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-android.dtsi对于Linux平台vi kernel/arch/arm64/boot/dts/rockchip/rk3588-linux.dtsi在这两个文件中找到fiq-debugger节点将其状态改为disabledfiq-debugger { status disabled; };3.2 修改bootargs参数在同一个文件的chosen节点中我们需要修改bootargs参数chosen { bootargs earlyconuart8250,mmio32,0xfeb50000 consolenull; };这里有两个关键修改去掉原来的consolettyFIQ0添加consolenull3.3 使能UART2作为普通串口接下来需要修改板级设备树文件对于Android平台vi kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-atk-evb7-lp4-v10.dts对于Linux平台vi kernel/arch/arm64/boot/dts/rockchip/rk3588-atk-devkit.dts在文件末尾添加uart2 { pinctrl-names default; pinctrl-0 uart2m0_xfer; status okay; };4. 内核编译与烧录测试完成设备树修改后需要重新编译内核。这里有个小技巧可以先只编译内核节省时间。4.1 Android平台编译source build/envsetup.sh lunch ATK_DLRK3588-userdebug make installclean ./build.sh -KA -J12编译完成后使用以下命令单独烧录boot.imgfastboot flash boot boot.img fastboot reboot4.2 Linux平台编译如果之前已经完整编译过SDK./build.sh alientek_rk3588_defconfig ./build.sh kernel烧录命令与Android平台相同。5. 功能验证与常见问题排查烧录完成后我们需要验证修改是否成功。这里分享几个我常用的验证方法方法一检查串口设备节点ls /dev/ttyS*应该能看到ttyS2设备RK3588的UART2对应的设备节点。方法二测试串口通信连接USB转TTL模块到UART2引脚然后stty -F /dev/ttyS2 115200 echo test /dev/ttyS2同时在PC端使用串口调试工具应该能看到test字符串。常见问题排查如果系统无法启动检查bootargs修改是否正确确认没有语法错误尝试恢复原始设备树文件如果串口无法使用检查引脚连接是否正确确认波特率设置一致使用示波器检查是否有信号输出性能优化建议可以根据实际需求调整串口缓冲区大小考虑使用DMA模式提高传输效率在资源紧张时可以关闭流控功能6. 进阶应用与扩展思考成功将UART2转为普通串口后我们可以进一步优化使用体验。这里分享几个实战经验多串口管理策略 当系统中有多个串口设备时建议统一管理。我通常会在/etc/udev/rules.d/目录下创建规则文件为每个串口设备创建固定的符号链接。例如SUBSYSTEMtty, ATTRS{idVendor}10c4, ATTRS{idProduct}ea60, SYMLINKzigbee性能调优参数 在高波特率(3Mbps以上)使用时可能需要调整内核参数echo 1 /sys/module/serial_core/parameters/ignore_console_lock_warning电源管理考虑 在电池供电设备中可以通过以下命令关闭串口时钟门控echo 0 /sys/bus/platform/devices/fe680000.serial/clock_gating安全性建议 生产环境中建议为串口通信添加加密措施。可以使用openssl实现简单的加密传输# 发送端 openssl enc -aes-256-cbc -in data.txt -out encrypted.dat -pass pass:yourpassword # 接收端 openssl enc -d -aes-256-cbc -in encrypted.dat -out decrypted.txt -pass pass:yourpassword在实际项目中我还遇到过需要动态切换串口模式的需求。这可以通过编写内核模块来实现但需要特别注意同步问题。一个简单的实现框架如下#include linux/tty.h #include linux/serial_core.h static int uart_mode_switch(struct uart_port *port, int mode) { // 实现模式切换逻辑 return 0; }最后提醒一点修改后的设备树最好保存为自定义版本避免后续SDK升级时被覆盖。我通常会在文件名中加入公司或项目前缀比如rk3588-myproject.dts。

更多文章