Linux 开发板串口调试:picocom 从识别到退出的完整用法

摘要:介绍 /dev/ttyUSB0 的识别、LubanCat 常用串口参数、picocom 快捷键和网络失效时的串口排障方法。

为什么需要串口

SSH 只能在网络和 sshd 正常时使用。修改启动参数、网卡配置或内核后,设备可能已经启动,但网络尚未配置;如果内核或 initramfs 出错,SSH 更无法提供线索。串口可以直接观察 U-Boot、内核、initramfs 和 systemd 日志,是嵌入式 Linux 的"最后通道"。

一、识别串口设备

开发主机执行:

bash 复制代码
sudo apt install picocom
ls /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 停止位、关闭流控:

bash 复制代码
sudo picocom \
  --baud 1500000 \
  --flow n \
  --parity n \
  --databits 8 \
  --stopbits 1 \
  /dev/ttyUSB0

这里保留 picocom 默认的串口锁,避免两个程序同时读取同一个设备。只有明确知道锁文件机制不可用时才考虑 --nolock。

如果终端出现乱码,优先检查波特率、TX/RX/GND 接线和串口电平,而不是马上修改内核。

三、正确退出 picocom

picocom 使用"前缀键 + 命令键":

text 复制代码
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 当成帮助键:它会把波特率提高一档,可能立即产生乱码。参数被误改后,可退出并使用完整启动命令重新打开。

四、权限问题

临时解决:

bash 复制代码
sudo picocom /dev/ttyUSB0 -b 1500000

长期解决:

bash 复制代码
sudo usermod -aG dialout "$USER"

重新登录后,用户通常即可直接访问串口。

若提示设备忙,检查是否已有 picocom、minicom 或 ModemManager 占用:

bash 复制代码
sudo fuser -v /dev/ttyUSB0
ps -ef | grep -E '[p]icocom|[m]inicom'

不要同时运行两个串口工具。需要保存启动日志时,可以增加:

bash 复制代码
picocom --baud 1500000 --flow n --parity n \
  --databits 8 --stopbits 1 \
  --logfile serial-boot.log /dev/ttyUSB0

小结

串口调试的价值在于"网络失效时仍能看到真相"。建议每次升级内核都保留一份完整串口日志,并在日志中标注上电、重启和执行命令的时间点。

参考资料:picocom 官方 README 和 picocom 手册页。

相关推荐
程序员-Benothing14 小时前
Linux系统启动流程详解:BIOS/UEFI、GRUB、initramfs、systemd
linux·运维·服务器
KKKlucifer14 小时前
从规则堆叠到策略涌现:AI大模型驱动的数据安全智能策略生成与自动化响应实践
运维·人工智能·自动化
余槐i14 小时前
-m 2g 反而更早 OOM:Docker 内存计数与宿主机空闲口径差异
java·linux·docker·性能优化·cgroup
傲世仙尊14 小时前
线程池收尾-回调单例与可重入线程安全
linux·安全
风华同学14 小时前
Docker镜像换源
运维·docker·容器
牢姐与蒯15 小时前
Linux信号(二).信号产生续 && 信号保存
linux·运维·服务器·ubuntu
何中应15 小时前
Jenkins 如何给设置公司 Logo
运维·ci/cd·jenkins
SoStraw15 小时前
跨平台P2P通信SDK,Windows/Android/iOS/Linux/macOS一套API全兼容
android·linux·windows·跨平台·p2p·webrpc
皓月盈江15 小时前
WordPress博客迁移到Hexo静态博客教程
linux·服务器·hexo·wordpress·博客迁移·静态博客
Szime15 小时前
项目结束后,剩余的电子元器件怎么处理?——从“库存滞留”到“资产盘活”的更高解法
运维·嵌入式硬件