在 Linux 下调试串口,是不是每次设备掉线都要手动重连?
串口设备重启后路径变了,之前配好的参数全得重来一遍?
这种折腾,搞嵌入式 Linux 开发的同学应该都不陌生。
在 Windows 上有很多图形化的串口工具,自动重连和设备管理都比较方便。
但是在 Linux 命令行中选项就比较少了,只能使用 minicom、screen 等老式工具或者自己编写脚本来实现。
最近发现了一个开源神器——tio,是为Linux命令行场景而生的,一下就解决了这些烦人的事情。

本以为又是一个功能堆砌在一起的大杂烩,但是仔细看一遍发现,它把“简单好用”这件事情做到了极致。不需要复杂的设置,也不需要花里胡哨的界面,只是一心一意地把串口调试做好。
这种克制的设计思路,反而让tio在嵌入式开发圈子里口碑越来越好。 Github 上有 3000多人关注。
01 自动重连,省掉大量重复操作
普通的串口工具一断开就退出了,你要重新敲命令来连接。使用tio的话,在设备断开之后它会自动检测到,并且当设备再次出现的时候就会自动连接上。

做硬件开发时,设备重启、USB线松了、固件更新,都会导致连接中断。
调试阶段设备可能要重启几十次,这个自动重连功能能省掉大量重复操作。
02 设备路径变了也不怕
在Linux系统中,串口设备的路径会经常发生变化,这次是/dev/ttyUSB0,下一次可能会变成/dev/ttyUSB1。
TIO 使用了拓扑 ID(TID),按照 USB 设备在总线上所处的位置来产生唯一的标识。
只要USB拓扑结构没有改变,即使设备重新枚举了,TID也不会发生变化。
可以使用tio bCC2这样的短命令来直接连接,而不需要每次都要查询设备路径。
03 配置文件把重复劳动固化下来
每次连接串口的时候都要设置好波特率、数据位、校验位和停止位,时间久了就很容易忘记。
TIO 支持配置文件,可以将常用的设备参数保存起来。

在~/.config/tio/config中添加一个配置,并为树莓派、Arduino和ESP32分别设置一套参数。
以后只要用tio rpi3或者tio esp32就可以直接连接上了,不需要每次都要输入一大堆参数。
还可以在配置文件中设置日志、颜色、自动执行脚本等功能。
Lua脚本自动化,批量调试更高效
TIO 内置了 Lua 脚本引擎,在连接的时候可以自动执行一些操作。

例如自动登录到Linux系统中去,或者是自动执行一些初始化命令。
这对于批量调试和自动化的测试场景非常有用。
可以将脚本文件放在配置文件中,也可以把脚本代码直接写到命令行里。
虽然不是每个人都会用到,但对于需要自动化的人来说,这个功能确实能提升效率。
03 日志和时间戳,调试更清晰
在调试串口通信的时候,记录日志是非常必要的。
TIO 支持自动日志记录,并且可以根据时间戳来命名文件,也可以指定日志文件名。
还可以对控制字符、转义序列进行过滤,使日志更加整洁。
时间戳功能可以为每一条输出添加上时间标签,并且支持多种格式。
可以用来分析通信时序,所有的功能都是为实际调试场景而设计的。
不是为了功能而存在的堆砌。
上手门槛很低
在Linux上,大多数发行版都可以直接使用包管理器来安装。
Ubuntu 用 sudo apt install tio,Fedora 用 sudo dnf install tio,Arch Linux 用 sudo pacman -S tio。
macOS可以使用Homebrew来安装。
安装完毕之后,最简单的方法就是使用tio --list来列出所有的串口。

要指定波特率的话就加上一个-b参数就可以了,例如tio -b 9600 /dev/ttyUSB0。
退出也十分容易,只需要按下Ctrl+tq就可以。
命令行交互很贴心
在会话中按下Ctrl-t可以查看到所有的命令。
比如切换日志、查看统计数据、发送特殊字符等等。
这样就使工具本身也成了可以被探索的对象,并不需要每次都要去查阅文档。
当然,tio也不是万能的。
它主要是针对串口调试场景设计的,如果要图形界面和多窗口管理的话,还是需要使用专门的终端软件。
但是对于嵌入式开发人员和硬件爱好者而言,tio的功能已经可以满足大多数应用场景了。
TIO的设计思路是把串口调试这件事做好,而不要把它做得太大或者太全面。
不求大而全的功能,只解决实际使用中遇到的问题。
自动重连、拓扑ID、配置文件、脚本自动化、日志记录等每个功能都是针对痛点设计的。
感兴趣的朋友可以试试看。
开源地址:https://github.com/tio/tio