
T113-S3开发板调试串口不够用手把手教你将Tina Linux的默认调试口从UART0切换到UART1当你在T113-S3开发板上进行嵌入式开发时可能会遇到一个常见问题默认的调试串口UART0被其他外设如LCD占用了。这时候系统启动信息无法正常输出给调试工作带来极大不便。本文将详细介绍如何将Tina Linux的默认调试串口从UART0切换到UART1解决这一硬件资源冲突问题。1. 问题分析与准备工作在开始修改之前我们需要先确认几个关键点硬件连接确保开发板上的UART1引脚已经正确引出并且你有对应的USB转串口工具可以连接引脚复用检查UART1的引脚是否被其他功能占用如GPIO、SPI等当前配置了解系统默认使用UART0作为调试串口的各个配置点常见问题排查清单串口线连接是否正确TX接RXRX接TX终端软件配置是否正确波特率通常为115200引脚电平是否匹配3.3V或1.8V提示在修改任何配置文件前建议先备份原始文件以便出现问题时可以快速恢复。2. 系统级配置修改2.1 修改sys_config.fex文件首先需要修改Tina Linux的系统配置文件路径通常为Tina-Linux/config/device/config/chips/t113/configs/mq_r/sys_config.fex找到[uart_para]字段修改或添加以下内容[uart_para] uart_debug_port 1 ; 将默认调试串口改为UART1 uart_debug_tx port:PD2141defaultdefault ; UART1_TX引脚配置 uart_debug_rx port:PD2241defaultdefault ; UART1_RX引脚配置关键参数说明4表示引脚功能选择不同SoC可能不同1表示引脚内部上拉default表示使用默认驱动强度和上下拉配置2.2 验证引脚复用配置使用以下命令检查引脚复用情况cat /sys/kernel/debug/pinctrl/pinctrl-handles如果发现PD21和PD22被其他功能占用需要在设备树中解除这些引脚的复用。3. U-Boot配置调整3.1 修改U-Boot默认配置U-Boot的配置文件通常位于Tina-Linux/lichee/brandy-2.0/u-boot-2018/configs/sun8iw20p1_defconfig找到Serial drivers部分修改或添加CONFIG_CONS_INDEX2 # 1对应UART02对应UART1 CONFIG_DEBUG_UART_BASE0x02500400 # UART1的寄存器基地址3.2 更新U-Boot设备树修改U-Boot的设备树文件通常为uboot-board.dtsuart1 { pinctrl-names default, sleep; pinctrl-0 uart1_pins_a; pinctrl-1 uart1_pins_b; status okay; };确保对应的引脚定义正确uart1_pins_a: uart10 { pins PD21, PD22; function uart1; drive-strength 10; bias-pull-up; };4. 内核级配置修改4.1 调整内核启动参数修改env.cfg文件中的内核启动参数Tina-Linux/config/device/config/chips/t113/configs/mq_r/env.cfg将原来的UART0配置consolettyS0,115200 earlyprintksunxi-uart,0x02500000改为UART1配置consolettyS1,115200 earlyconsunxi-uart,0x02500400地址说明UART0: 0x02500000UART1: 0x02500400UART2: 0x02500800以此类推每个UART间隔0x4004.2 内核配置更新修改内核配置文件Tina-Linux/config/device/config/chips/t113/configs/mq_r/linux-5.4/config-5.4确保以下配置正确CONFIG_SERIAL_SUNXI_CONSOLEy CONFIG_SERIAL_SUNXI_UART1y CONFIG_SERIAL_SUNXI_EARLYCONy5. 编译与测试5.1 完整编译流程执行以下命令进行完整编译make clean make -j8 mboot pack常见编译问题如果出现引脚冲突错误检查设备树中的引脚定义如果U-Boot无法启动检查defconfig中的CONFIG_CONS_INDEX设置如果内核没有输出检查earlycon参数和console参数是否一致5.2 测试验证成功编译后烧录镜像到开发板通过UART1连接终端工具如Putty或Minicom你应该能看到以下输出流程Boot ROM阶段输出如果有U-Boot启动信息内核启动信息系统登录提示调试技巧如果只有部分阶段有输出检查对应阶段的配置如果完全没有输出检查硬件连接和引脚配置如果输出乱码检查波特率设置和时钟配置6. 进阶技巧与问题排查6.1 多串口同时使用配置如果需要同时使用多个串口可以这样配置串口功能设备节点典型用途UART0禁用-保留给LCD等外设UART1调试控制台/dev/ttyS1系统控制台UART2应用通信/dev/ttyS2模块通信UART3调试输出/dev/ttyS3内核日志6.2 常见问题解决方案问题1U-Boot有输出但内核没有输出解决方案检查内核命令行参数中的console和earlycon设置问题2输出出现乱码解决方案确认终端波特率设置为115200检查时钟配置是否正确验证引脚电压是否匹配问题3部分启动阶段没有输出解决方案分阶段检查配置Boot ROM阶段通常不可配置U-Boot阶段检查CONFIG_CONS_INDEX内核早期阶段检查earlycon参数内核后期阶段检查console参数6.3 性能优化建议降低输出延迟在U-Boot配置中增加CONFIG_DEBUG_UART_ANNOUNCEy CONFIG_DEBUG_UART_SKIP_INITy增加缓冲区大小在内核配置中调整CONFIG_SERIAL_SUNXI_BUFSIZE1024启用流控制对于长距离通信可以启用硬件流控制uart1 { pinctrl-names default; pinctrl-0 uart1_pins_a uart1_rts_cts_pins; status okay; };在实际项目中我遇到过因为LCD和UART0引脚冲突导致系统无法启动的情况。通过将调试串口切换到UART1不仅解决了问题还保留了LCD功能。关键是要仔细检查每一阶段的配置确保从Boot ROM到内核的整个启动流程都正确配置了UART1作为输出。