
1. 为什么你需要minicom这个串口调试神器搞嵌入式开发的朋友应该都深有体会串口调试简直就是硬件开发的生命线。记得我刚开始玩树莓派的时候每次看到板子上那几个小小的串口引脚就像找到了救命稻草——系统起不来怎么办串口看日志程序崩溃了怎么办串口抓输出驱动不工作怎么办串口调参数在Linux环境下虽然可以直接用stty、cat这些基础命令操作串口但实际用起来真是各种别扭。比如你想同时收发数据就得开两个终端窗口想看十六进制数据流还得自己写脚本转换更别提那些复杂的流控设置了。这时候minicom就像个瑞士军刀把所有串口调试需要的功能都打包好了。我第一次用minicom是在调试一个物联网网关时当时用cat命令看串口数据不仅没法显示控制字符还经常丢数据。换成minicom后突然发现原来串口数据里还藏着这么多有用信息后来无论是调试STM32单片机还是排查工业路由器的启动问题minicom都成了我工具箱里的标配。2. 5分钟快速上手minicom2.1 安装与权限配置在Ubuntu或Debian系系统上安装minicom就是一行命令的事sudo apt update sudo apt install minicom不过安装完直接使用可能会遇到权限问题。我建议把当前用户加入dialout组串口设备默认属组sudo usermod -aG dialout $USER执行完需要注销重新登录生效。这个操作只需要做一次以后就不用老是sudo了。2.2 基础启动命令最简单的启动方式是指定设备名和波特率minicom -D /dev/ttyUSB0 -b 115200这里有个实用技巧设备名可以用tab键自动补全。比如输入/dev/ttyU后按tab系统会列出所有匹配的设备。如果你不确定设备名可以用这两个命令查找ls /dev/tty* dmesg | grep tty我习惯用dmesg因为插上USB转串口线时内核日志会直接打印出分配的设备名比如[ 1234.567890] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB02.3 首次使用的界面操作启动后的界面非常简洁上半部分是接收区所有串口数据都会实时显示最下面一行是状态栏显示当前配置键盘输入会直接发送但默认不显示你输入的内容要退出时按CtrlA然后按X会弹出确认窗口。这里新手容易犯的错是直接按CtrlX——这其实是两个组合键操作先按CtrlA松开再按X。3. 高手都在用的进阶配置技巧3.1 保存常用配置方案每次手动输参数太麻烦minicom支持保存多套配置。先进入配置模式minicom -s会出现一个文本菜单-----[configuration]------ | Filenames and paths | | File transfer protocols | | Serial port setup | | Modem and dialing | | Screen and keyboard | | Save setup as dfl | | Save setup as.. | | Exit | | Exit from Minicom | --------------------------选择Serial port setup这里藏着很多宝藏配置串口设备建议填/dev/ttyUSB0这样的具体设备波特率根据设备设置常见有9600、115200等硬件流控大多数情况选No软件流控建议保持No数据位/停止位通常8N18数据位、无校验、1停止位配置完选择Save setup as dfl保存为默认配置以后直接运行minicom就会自动加载。3.2 十六进制调试大法分析二进制协议时HEX模式简直是神器。启动时加-H参数minicom -D /dev/ttyUSB0 -H或者在运行时按CtrlA然后H切换HEX显示。效果是这样的00000000: 48 65 6C 6C 6F 20 57 6F 72 6C 64 0A Hello World.左边是十六进制右边是对应的ASCII字符。有次调试Modbus协议时就是靠这个功能发现设备返回的数据里有个字节始终是0xFF最终定位到是电源电压不稳导致的数据错误。3.3 自动换行与回显控制默认情况下minicom有几个反人类设计长数据不会自动换行会一直往右滚输入的内容不显示虽然会发送解决方法启动时加-w参数启用自动换行按CtrlA然后E切换本地回显或者在配置文件中永久设置# 编辑~/.minirc.dfl sudo nano ~/.minirc.dfl添加这两行pu linewrap on pu localecho on4. 实战中的疑难问题解决4.1 设备忙或权限被拒绝常见的错误信息Device /dev/ttyUSB0 is locked. Cannot open /dev/ttyUSB0: Permission denied解决方法分三步检查当前用户是否在dialout组groups检查是否有其他进程占用了串口sudo lsof /dev/ttyUSB0如果确定没被占用可以强制解锁sudo rm /var/lock/LCK..ttyUSB04.2 中文乱码问题minicom默认使用UTF-8编码但如果设备发的是GBK编码就会显示乱码。解决方法启动前设置LANG环境变量LANGzh_CN.GBK minicom或者在配置文件中指定pu termcharset GBK4.3 长时间抓取日志调试启动过程时经常需要保存串口日志。minicom自带日志功能运行时按CtrlA然后L选择日志文件路径再次按CtrlA然后L停止记录更专业的做法是用screen命令screen -L -Logfile serial.log /dev/ttyUSB0 115200按CtrlA然后\退出日志会保存在serial.log中。5. 结合其他工具提升效率5.1 使用expect自动化交互调试带交互命令的设备时可以写expect脚本自动应答。比如自动登录路由器#!/usr/bin/expect spawn minicom -D /dev/ttyUSB0 expect login: send admin\r expect Password: send 123456\r interact5.2 配合tmux分屏操作我习惯用tmux开两个面板左边运行minicom右边用vim编辑脚本或查看文档创建会话命令tmux new-session -s serial tmux split-window -h tmux send-keys -t 0 minicom Enter tmux send-keys -t 1 vim Enter tmux attach -t serial5.3 网络串口转发技巧有时候需要在远程服务器调试串口设备。可以用socat创建网络串口# 服务端连接真实串口 socat TCP-LISTEN:54321,reuseaddr,fork FILE:/dev/ttyUSB0,raw,nonblock,waitlock/var/run/ttyUSB0.lock # 客户端本地连接 socat PTY,link/dev/virtualcom TCP:服务器IP:54321然后本地minicom连接/dev/virtualcom就行。