RK平台串口功能重构:从调试串口释放到普通串口的实战指南

张开发
2026/4/18 16:18:01 15 分钟阅读

分享文章

RK平台串口功能重构:从调试串口释放到普通串口的实战指南
1. RK平台串口功能重构的必要性在RK平台的开发过程中调试串口FIQ串口通常被默认配置为系统调试和日志输出通道。但随着项目进展到量产阶段这个串口往往就变成了鸡肋——既占用了宝贵的硬件资源又无法被应用程序直接使用。我遇到过好几个项目都是因为串口资源紧张不得不把调试串口重新利用起来。调试串口和普通串口的本质区别在于驱动层实现。FIQFast Interrupt Request是一种特殊的硬件中断机制它允许调试器在任何情况下都能抢占CPU。这虽然方便了调试但也意味着这个串口不能被标准串口驱动管理。实测下来直接操作FIQ串口的GPIO会导致系统崩溃因为中断处理机制存在冲突。2. 内核层面的配置调整2.1 禁用FIQ调试器驱动首先需要修改内核配置我习惯使用menuconfig界面操作make ARCHarm64 menuconfig在配置界面中依次找到Device Drivers - Character devices - [ ] FIQ Debugger support把所有FIQ_DEBUGGER开头的选项都取消选中。如果使用直接修改.config文件的方式需要注释掉以下配置# CONFIG_FIQ_DEBUGGERy # CONFIG_FIQ_DEBUGGER_NO_SLEEPy # CONFIG_FIQ_DEBUGGER_CONSOLEy # CONFIG_FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLEy2.2 设备树节点修改以RK3399平台的uart2为例需要修改两个地方。首先是禁用fiq_debugger节点fiq_debugger { status disabled; };然后启用对应的uart节点uart2 { status okay; pinctrl-names default; pinctrl-0 uart2c_xfer; };这里有个坑要注意不同RK芯片的uart引脚命名可能不同。比如RK3568的uart2引脚组就叫uart2m0_xfer一定要查清楚芯片手册。3. 解决uboot日志冲突问题3.1 修改bootargs参数即使内核配置正确uboot可能还是会占用串口输出日志。在设备树的chosen节点中需要清理earlycon相关配置chosen { // 删除这行 // bootargs earlyconuart8250,mmio32,0xff1a0000; // 建议保留其他参数 bootargs swiotlb1 coherent_pool1m; };3.2 修改parameter.txt在Android系统下还需要修改parameter文件中的控制台配置androidboot.consoleNULL这个文件通常位于boot分区的parameter.txt修改后需要重新打包boot镜像。4. 串口号重映射实战4.1 修改FIQ串口ID如果需要将调试功能转移到其他串口比如从uart2改为uart0设备树需要做如下调整fiq_debugger: fiq-debugger { compatible rockchip,fiq-debugger; rockchip,serial-id 0; // 改为目标串口编号 rockchip,baudrate 115200; pinctrl-names default; pinctrl-0 uart0_xfer; // 同步修改引脚配置 };4.2 uboot端的适配修改在uboot代码中需要同步修改配置以RK3399为例// 修改u-boot/include/configs/rk_default_config.h #define CONFIG_UART_NUM UART_CH0同时检查config文件CONFIG_SYS_EXTRA_OPTIONSUART_NUMUART_CH05. 常见问题排查遇到过最头疼的问题是修改后系统无法启动。这时候可以按以下步骤排查确认串口引脚没有被其他功能复用检查时钟配置是否正确特别是对于某些需要单独供电的串口用示波器测量TX引脚是否有波形输出查看内核启动日志确认uart驱动是否正常加载有个特别隐蔽的坑某些RK平台的串口控制器需要配置dma缓冲区。如果遇到数据丢失可以在设备树中添加uart2 { dmas dmac0 8, dmac0 9; dma-names tx, rx; };6. 性能优化建议将调试串口改为普通串口后可以通过以下配置提升性能uart2 { fifo-size 64; // 增大FIFO缓冲区 auto-flow-control; // 启用硬件流控 };在应用层建议设置合适的接收超时和缓冲区大小。实测使用DMA模式传输115200波特率的数据CPU占用率可以从15%降到3%以下。

更多文章