1. 为什么选择screen管理串口?
第一次接触串口调试时,我和大多数人一样用的是minicom。直到有次调试某款嵌入式设备,发现minicom显示BIOS信息时色彩混乱,这才开始寻找替代方案。screen这个看似普通的终端复用工具,在串口通信领域其实是个隐藏的瑞士军刀。
和minicom相比,screen最明显的优势是零配置。用minicom得先跑sudo minicom -s配置串口参数,而screen直接screen /dev/ttyUSB0 115200就能用。有次在客户现场调试路由器,我就是靠这条命令快速抓取了启动日志,当时客户都惊讶这操作怎么如此丝滑。
另一个实战中发现的优势是会话保持。去年调试工控设备时,突然需要离开机房,我用Ctrl+A, D快速detach会话,下午回来screen -r直接恢复了之前的调试现场。要是用minicom,所有历史记录都丢了,又得从头开始触发设备异常。
2. 五分钟快速上手screen串口操作
2.1 基础连接与退出
先看最基础的串口连接命令:
screen /dev/ttyUSB0 115200这里有个容易踩的坑:设备节点名不固定。上周我调试树莓派时,发现有的系统识别为/dev/ttyAMA0,有的却是/dev/serial0。建议先用ls /dev/tty*确认设备节点,特别是USB转串口设备常显示为/dev/ttyUSB0或/dev/ttyACM0。
退出时千万别直接关终端!这会导致串口会话异常。正确的两种方式:
- 临时离开:
Ctrl+A松开后按D(detach) - 彻底退出:
Ctrl+A松开后按K,然后按y确认
2.2 会话管理三板斧
管理后台会话的三个核心命令:
screen -ls # 查看所有会话 screen -r 1234.pts-1 # 恢复指定会话 screen -D -r 1234 # 强制接管会话(当会话被占用时)有次我同事不小心关闭了终端,我们用screen -ls找到会话ID,screen -D -r成功恢复了正在进行的固件烧录。这个技巧在团队协作时特别有用,多个工程师可以接力调试同一台设备。
3. 高手都在用的进阶技巧
3.1 多窗口协同工作
调试物联网设备时,我常需要同时查看串口日志和操作shell。screen的多窗口功能可以这样用:
screen -S device_debug # 创建命名会话 Ctrl+A, C # 新建窗口 Ctrl+A, N # 切换下一个窗口 Ctrl+A, P # 切换上一个窗口最近给客户培训时,我开了两个窗口:一个持续tail -f日志文件,另一个执行测试命令。通过Ctrl+A, "可以可视化选择窗口,比开多个终端窗口清爽多了。
3.2 日志记录与时间戳
抓取启动日志时,这个组合命令救过我无数次:
screen -L -Logfile boot.log /dev/ttyUSB0 115200加上-L参数会自动记录会话内容。更实用的是结合ts命令添加时间戳:
screen -L bash -c 'screen /dev/ttyUSB0 115200 | ts "[%Y-%m-%d %H:%M:%S]" > boot.log'上周排查一个偶发启动失败的问题,就是靠时间戳定位到内核加载延迟了3秒。这个技巧在分析时序敏感型问题时特别管用。
4. 避坑指南:常见问题解决方案
4.1 权限问题处理
新手常遇到的Permission denied错误,有三种解决方案:
- 临时方案:
sudo screen... - 持久方案:把用户加入dialout组
sudo usermod -aG dialout $USER - 设备规则:创建udev规则文件
/etc/udev/rules.d/99-serial.rules:SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", MODE="0666"
去年部署自动化测试系统时,我用的第三种方案,这样不同容器里的服务都能访问串口设备。记得修改后要触发规则:sudo udevadm control --reload。
4.2 乱码与流控设置
遇到乱码时别急着换工具,先检查波特率和流控:
screen /dev/ttyUSB0 115200,cs8,-ixon,-ixoff参数说明:
cs8:8位数据位-ixon:禁用软件流控-ixoff:禁用输入流控
有次调试4G模块,加了-ixon才正常显示AT命令响应。如果还不行,可以尝试不同的波特率组合:9600、19200、38400、57600、115200。我包里常备的USB转串口工具,就是因为它最高支持到921600波特率。
5. 自动化集成实战案例
5.1 结合expect实现自动登录
这是我用在CI/CD流水线中的脚本片段:
#!/usr/bin/expect -f spawn screen /dev/ttyUSB0 115200 expect "login:" { send "root\r" } expect "Password:" { send "admin123\r" } expect "#" { send "ls /tmp\r" }配合screen的日志功能,可以实现无人值守的固件测试。最近在跑压力测试时,这个脚本连续运行了72小时没出问题。
5.2 嵌入式设备批量配置
给车间写过的生产工具脚本:
for port in /dev/ttyUSB{0..3}; do screen -dmS "config_$port" $port 115200 screen -S "config_$port" -X stuff "load_config.sh$(printf \\r)" done-dmS参数让会话在后台运行,-X stuff可以发送命令。通过这个方案,我们实现了四台设备并行烧录,生产效率提升了300%。