1. 为什么你需要minicom这个串口调试神器
搞嵌入式开发的朋友应该都深有体会,串口调试简直就是硬件开发的"生命线"。记得我刚开始玩树莓派的时候,每次看到板子上那几个小小的串口引脚,就像找到了救命稻草——系统起不来怎么办?串口看日志!程序崩溃了怎么办?串口抓输出!驱动不工作怎么办?串口调参数!
在Linux环境下,虽然可以直接用stty、cat这些基础命令操作串口,但实际用起来真是各种别扭。比如你想同时收发数据,就得开两个终端窗口;想看十六进制数据流,还得自己写脚本转换;更别提那些复杂的流控设置了。这时候minicom就像个瑞士军刀,把所有串口调试需要的功能都打包好了。
我第一次用minicom是在调试一个物联网网关时,当时用cat命令看串口数据,不仅没法显示控制字符,还经常丢数据。换成minicom后,突然发现原来串口数据里还藏着这么多有用信息!后来无论是调试STM32单片机,还是排查工业路由器的启动问题,minicom都成了我工具箱里的标配。
2. 5分钟快速上手minicom
2.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 首次使用的界面操作
启动后的界面非常简洁:
- 上半部分是接收区,所有串口数据都会实时显示
- 最下面一行是状态栏,显示当前配置
- 键盘输入会直接发送(但默认不显示你输入的内容)
要退出时,按Ctrl+A然后按X,会弹出确认窗口。这里新手容易犯的错是直接按Ctrl+X——这其实是两个组合键操作,先按Ctrl+A松开,再按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
- 数据位/停止位:通常8N1(8数据位、无校验、1停止位)
配置完选择"Save setup as dfl"保存为默认配置,以后直接运行minicom就会自动加载。
3.2 十六进制调试大法
分析二进制协议时,HEX模式简直是神器。启动时加-H参数:
minicom -D /dev/ttyUSB0 -H或者在运行时按Ctrl+A然后H切换HEX显示。效果是这样的:
00000000: 48 65 6C 6C 6F 20 57 6F 72 6C 64 0A Hello World.左边是十六进制,右边是对应的ASCII字符。有次调试Modbus协议时,就是靠这个功能发现设备返回的数据里有个字节始终是0xFF,最终定位到是电源电压不稳导致的数据错误。
3.3 自动换行与回显控制
默认情况下,minicom有几个反人类设计:
- 长数据不会自动换行(会一直往右滚)
- 输入的内容不显示(虽然会发送)
解决方法:
- 启动时加
-w参数启用自动换行 - 按
Ctrl+A然后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..ttyUSB0
4.2 中文乱码问题
minicom默认使用UTF-8编码,但如果设备发的是GBK编码,就会显示乱码。解决方法:
- 启动前设置LANG环境变量:
LANG=zh_CN.GBK minicom - 或者在配置文件中指定:
pu termcharset GBK
4.3 长时间抓取日志
调试启动过程时,经常需要保存串口日志。minicom自带日志功能:
- 运行时按
Ctrl+A然后L - 选择日志文件路径
- 再次按
Ctrl+A然后L停止记录
更专业的做法是用screen命令:
screen -L -Logfile serial.log /dev/ttyUSB0 115200按Ctrl+A然后\退出,日志会保存在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就行。