全志Tina Linux UART调试端口修改与配置指南

📅 2026/7/17 1:12:38
全志Tina Linux UART调试端口修改与配置指南
1. 全志Tina Linux UART调试端口修改背景与需求在全志芯片的开发过程中UART调试端口是最基础也最重要的硬件接口之一。作为一名长期从事全志平台开发的工程师我经常遇到需要修改默认UART配置的情况。Tina Linux作为全志官方维护的嵌入式Linux发行版其UART配置涉及多个层级的设置稍有不慎就会导致系统无法启动或失去调试输出。最常见的两种场景是硬件设计变更导致原调试UART引脚被占用需要迁移到其他引脚项目需求需要使用更高性能的UART端口作为主控制台以全志T113芯片为例默认使用UART0(PE2/PE3)作为调试端口。但在实际项目中这个端口可能被分配给其他功能模块使用或者需要更高波特率的UART3(PB6/PB7)作为主控接口。此时就需要对Tina Linux的UART配置进行完整修改。2. UART0引脚迁移完整操作流程2.1 硬件层引脚功能确认在修改任何UART配置前必须仔细查阅芯片数据手册。以将UART0从PF2/PF4改为PE2/PE3为例确认PE2/PE3支持UART0功能查找引脚复用功能编号Function NumberPF2/PF4的UART0功能号为3PE2/PE3的UART0功能号为6这个信息将直接影响后续的设备树和sys_config.fex配置。2.2 sys_config.fex修改详解sys_config.fex是Tina Linux中影响Boot0和U-Boot阶段串口配置的关键文件路径通常为device/config/chips/t113/configs/evb1/sys_config.fex修改前配置[uart_para] uart_debug_port 0 uart_debug_tx port:PF0231defaultdefault uart_debug_rx port:PF0431defaultdefault修改后配置[uart_para] uart_debug_port 0 # 保持使用UART0 uart_debug_tx port:PE0261defaultdefault uart_debug_rx port:PE0361defaultdefault参数解析6引脚功能号必须与数据手册一致1内部上拉使能default保持默认驱动强度和上下拉配置2.3 设备树(board.dts)同步修改Linux内核使用的UART配置通过设备树定义路径为device/config/chips/t113/configs/evb1/board.dts关键修改点uart0_pins_a: uart0_pins0 { pins PE2, PE3; // 修改引脚 function uart0; drive-strength 10; allwinner,muxsel 6; // 功能号同步修改 bias-pull-up; };注意设备树中需要同时修改uart0_pins_a和uart0_pins_b两个节点确保睡眠模式下引脚状态正确。2.4 编译验证与常见问题完成修改后执行make -j8 pack常见问题排查无串口输出检查功能号是否正确测量引脚电压乱码确认波特率设置一致(通常115200)启动卡住检查uboot阶段是否正常输出3. 切换至UART3的完整配置方案3.1 硬件层差异分析UART3(PB6/PB7)与UART0的主要区别寄存器基地址不同UART0为0x02500000UART3为0x02500C00功能号不同PB6/PB7的UART3功能号为7需要启用额外的时钟域3.2 关键配置文件修改3.2.1 sys_config.fex修改[uart_para] uart_debug_port 3 # 改为UART3 uart_debug_tx port:PB0671defaultdefault uart_debug_rx port:PB0771defaultdefault3.2.2 设备树调整uart3_pins_a: uart3_pins0 { pins PB6, PB7; function uart3; allwinner,muxsel 7; ... }; uart0 { status disabled; // 禁用原UART0 }; uart3 { status okay; // 启用UART3 };3.2.3 U-Boot控制台索引修改路径brandy/brandy-2.0/u-boot-2018/configs/sun8iw20p1_defconfig添加CONFIG_SPECIFY_CONSOLE_INDEXy CONFIG_CONS_INDEX4 # UART3对应索引为313.3 启动参数(bootargs)更新修改env.cfgearlyprintksunxi-uart,0x02500C00 # UART3寄存器地址 consolettyS3,115200 # 设备节点改为ttyS3对于ARM平台还需修改内核配置make kernel_menuconfig找到Kernel hacking - Kernel low-level debugging functions修改调试UART地址为0x02500C004. 深度调试与问题排查4.1 多阶段输出验证UART调试端口涉及三个阶段的输出Boot ROM芯片固化代码不可配置U-Boot由sys_config.fex和CONFIG_CONS_INDEX控制Linux内核由设备树和bootargs控制验证方法上电瞬间观察是否有Boot ROM输出U-Boot阶段输出是否正常内核启动后控制台能否交互4.2 寄存器级调试技巧当配置完全正确但仍无输出时使用示波器测量TX引脚波形通过sunxi-fel工具读取寄存器sunxi-fel read 0x02500C00 0x100确认时钟门控已打开sunxi-fel read 0x0300100C 4 # 检查UART3时钟4.3 典型问题解决方案问题1内核启动后控制台无响应可能原因设备树中status未正确设置为okay引脚冲突其他驱动占用了UART引脚解决方案cat /proc/tty/driver/serial # 查看UART设备状态问题2输出乱码排查步骤确认所有配置的波特率一致(115200)检查晶振频率配置测量实际波特率误差问题3RISC-V与ARM差异RISC-V平台无需修改内核调试UART地址这是ARM平台特有的配置要求。5. 进阶配置与优化5.1 多UART端口共存配置在需要保留多个UART的场景下uart0 { status okay; pinctrl-names default; pinctrl-0 uart0_pins_a; }; uart3 { status okay; pinctrl-names default; pinctrl-0 uart3_pins_a; };5.2 高性能UART配置提升UART性能的配置项uart3_pins_a: uart3_pins0 { drive-strength 30; // 增加驱动强度 bias-disable; // 禁用上下拉 };5.3 电源管理集成睡眠模式下的UART配置uart3_pins_b: uart3_pins1 { pins PB6, PB7; function gpio_in; bias-pull-up; };在Linux设备驱动中注册PM回调static const struct dev_pm_ops sunxi_uart_pm_ops { .suspend sunxi_uart_suspend, .resume sunxi_uart_resume, };6. 不同全志芯片的适配经验6.1 T113与V851s差异V851s的UART3功能号为4而非7寄存器地址偏移量不同6.2 R528芯片的特殊配置R528中UART0默认分配给A7核UART2默认分配给DSP核 交换配置需要修改[uart_share] uart2_core arm # 改为ARM核控制6.3 F系列芯片注意事项F系列(Phoenix)芯片需要额外配置[uart_flowctl] uart3_flow 1 # 启用硬件流控7. 实测经验与技巧分享引脚复用优先级全志芯片的引脚功能有优先级确保没有其他模块占用更高优先级的复用功能电压域检查不同Bank的引脚可能属于不同电压域确保IO电压匹配早期调试技巧当完全无法获取输出时可以尝试短接TX/RX形成回环测试使用GPIO驱动LED作为简单调试信号自动化验证脚本#!/bin/bash # 检查UART驱动加载 ls /dev/ttyS* # 验证端口工作 stty -F /dev/ttyS3 115200 echo test /dev/ttyS3生产环境建议保留至少一个备用UART配置当主配置出错时可通过fel模式恢复通过以上完整的配置流程和实战经验开发者可以灵活调整全志芯片的UART配置满足各种硬件设计和应用场景的需求。在实际操作中建议每次修改后保存配置备份并建立完整的验证流程确保系统调试通道始终可用。