摘要:介绍
/dev/ttyUSB0的识别、LubanCat 常用串口参数、picocom 快捷键和网络失效时的串口排障方法。
适用对象:需要通过 USB-TTL 串口维护 LubanCat 的开发者。串口电平、接线和设备名必须按实际硬件确认。
文章目录
- 本篇要解决什么问题
- 串口调试链路
- 为什么需要串口
- 一、识别串口设备
- 二、使用 1500000、8N1 打开串口
- 三、正确退出 picocom
- 四、权限问题
- 五、乱码、无输出和设备忙怎么排查
- 1. 能打开串口,但全是乱码
- 2. 串口完全没有输出
- 3. `Device or resource busy`
- 六、建议把启动日志作为“升级证据”保存
- 七、本文验收清单
- 小结
- 工作流实测截图
- 专栏导航
- 参考资料
本篇要解决什么问题
在嵌入式 Linux 内核升级中,SSH 是“方便的通道”,串口才是“兜底的通道”。如果新内核启动失败、网卡驱动没有加载、IP 地址改变,SSH 往往最先失效,而调试串口仍然可以看到 U-Boot、Kernel、initramfs 和 systemd 的原始日志。
本文重点解决四个实际问题:
- 如何确认 USB-TTL 在 Linux 主机上对应哪个设备节点;
- 为什么 LubanCat 常用
1500000 8N1,以及乱码时先查什么; - picocom 如何正确退出、查看参数和保存日志;
- 串口被占用或权限不足时如何定位。
串口调试链路
| 层级 | 典型现象 | 串口能看到什么 |
|---|---|---|
| U-Boot | 启动介质、DTB、kernel image 选择错误 | U-Boot 命令与加载日志 |
| Kernel | 内核崩溃、驱动 probe 失败 | earlycon、内核日志 |
| initramfs | 找不到 rootfs | BusyBox/initramfs 提示 |
| systemd | 服务失败、网络未就绪 | 服务启动日志与 login 提示 |
为什么需要串口
SSH 只能在网络和 sshd 正常时使用。修改启动参数、网卡配置或内核后,设备可能已经启动,但网络尚未配置;如果内核或 initramfs 出错,SSH 更无法提供线索。串口可以直接观察 U-Boot、内核、initramfs 和 systemd 日志,是嵌入式 Linux 的“最后通道”。
一、识别串口设备
开发主机执行:
sudoaptinstallpicocomls/dev/ttyUSB*ls/dev/ttyACM* picocom--help|head常见结果是/dev/ttyUSB0。picocom --help开头应显示HIGH_BAUD is enabled,否则当前构建可能不支持 1500000 波特率。拔插设备后编号可能变为/dev/ttyUSB1,不要把编号永久写死在脚本中;生产环境可以根据 USB 设备属性建立 udev 规则。
二、使用 1500000、8N1 打开串口
LubanCat 调试串口常用参数为 1500000 波特率、8 数据位、无校验、1 停止位、关闭流控:
sudopicocom\--baud1500000\--flown\--parityn\--databits8\--stopbits1\/dev/ttyUSB0这里保留 picocom 默认的串口锁,避免两个程序同时读取同一个设备。只有明确知道锁文件机制不可用时才考虑--nolock。
如果终端出现乱码,优先检查波特率、TX/RX/GND 接线和串口电平,而不是马上修改内核。
三、正确退出 picocom
picocom 使用“前缀键 + 命令键”:
Ctrl-A,然后 Ctrl-X屏幕出现Terminating... Thanks for using picocom即表示已经退出。直接按Ctrl-C通常只是把中断字符发送给目标设备上的前台程序,不会关闭 picocom。
常用快捷键:
| 操作 | 按键 |
|---|---|
| 显示帮助 | Ctrl-A、Ctrl-H,也可用Ctrl-K |
| 退出 | Ctrl-A、Ctrl-X |
| 不恢复串口设置直接退出 | Ctrl-A、Ctrl-Q |
| 显示当前串口参数 | Ctrl-A、Ctrl-V |
发送普通Ctrl-A | 连按两次Ctrl-A |
不要把Ctrl-A、Ctrl-U当成帮助键:它会把波特率提高一档,可能立即产生乱码。参数被误改后,可退出并使用完整启动命令重新打开。
四、权限问题
临时解决:
sudopicocom /dev/ttyUSB0-b1500000长期解决:
sudousermod-aGdialout"$USER"重新登录后,用户通常即可直接访问串口。
若提示设备忙,检查是否已有 picocom、minicom 或 ModemManager 占用:
sudofuser-v/dev/ttyUSB0ps-ef|grep-E'[p]icocom|[m]inicom'不要同时运行两个串口工具。需要保存启动日志时,可以增加:
picocom--baud1500000--flown--parityn\--databits8--stopbits1\--logfileserial-boot.log /dev/ttyUSB0五、乱码、无输出和设备忙怎么排查
1. 能打开串口,但全是乱码
优先检查下面四项,而不是先改内核:
- 波特率是否为目标板实际使用值;
- TX/RX 是否交叉连接;
- GND 是否共地;
- USB-TTL 电平是否与板卡调试口匹配。
如果刚刚误按了 picocom 的波特率切换快捷键,退出后使用完整参数重新打开通常比继续在会话里试更可靠。
2. 串口完全没有输出
可以先确认 USB 设备节点是否存在,再执行:
ls-l/dev/ttyUSB* /dev/ttyACM*2>/dev/nullsudofuser-v/dev/ttyUSB0如果设备节点存在但没有任何启动日志,还要确认自己连接的是板卡的调试 UART,而不是普通业务串口。
3.Device or resource busy
不要直接加--nolock绕过。先找出占用程序:
sudofuser-v/dev/ttyUSB0ps-ef|grep-E'[p]icocom|[m]inicom|[s]creen'如果系统启用了 ModemManager,它也可能探测 USB 串口,需要结合实际环境判断是否影响当前设备。
六、建议把启动日志作为“升级证据”保存
一次内核升级至少应保留一份从上电开始的完整串口日志。日志中最好能同时看到:
- U-Boot 选择了哪个启动项;
- 加载了哪个 kernel、initrd 和 DTB;
- Linux kernel release;
- rootfs 挂载过程;
- 最终是否出现 login 提示。
这样即使 SSH 失败,也可以通过日志区分“系统没起来”和“系统已经起来但网络没通”。
七、本文验收清单
- 能识别
/dev/ttyUSBx或/dev/ttyACMx; - 能用正确波特率看到可读启动日志;
- 知道
Ctrl-A+Ctrl-X正确退出; - 能定位串口占用进程;
- 能使用
--logfile保存完整启动日志。
小结
串口调试的价值在于“网络失效时仍能看到真相”。建议每次升级内核都保留一份完整串口日志,并在日志中标注上电、重启和执行命令的时间点。
工作流实测截图
图1:实际使用的 /dev/ttyUSB0、1500000、8N1 和无流控参数。
图2:调试串口捕获的 DDR 与内核重启信息;串口日志是 SSH 不可用时的第一现场。
专栏导航
专栏:LubanCat RK3588 实时 Linux 开发实战(第 2/13 篇)
- 上一篇:LubanCat RK3588 实时 Linux 开发(一):移植前先确认硬件、系统与内核版本
- 下一篇:LubanCat RK3588 实时 Linux 开发(三):SDK 环境准备与 flex、bison、LZ4 依赖排查
参考资料
- picocom 官方 README
- picocom 手册页
文中的版本号、接口名、设备地址和测试数据均应以自己的板卡实测为准;引用命令前请先确认当前 SDK、内核和启动布局。
标签:picocom串口调试LinuxLubanCat嵌入式开发