资讯动态

cutecom使用指南:从源码编译到串口调试与文件传输

发布时间:2026/10/18 2:22:39 来源:尧图企业网站定制
简介cuteCOM是一款面向Linux开发者和嵌入式工程师的图形化串口通信工具源码包完整开放适合需要调试设备、传输数据文件或研究串口编程的读者。工具不仅支持常规串口参数配置波特率、数据位、停止位、校验位和多个串口间快速切换还内置了直接从应用发送文件的功能在嵌入式固件更新、数据采集等场景中非常实用。压缩包共5个文件包含2个C源文件、1个UI界面定义、1个Qt工程文件和1个头文件整体仅14KB结构精简便于快速阅读和二次编译。目前已有166人学习下载。通过阅读和修改代码读者可以深入理解串口通信协议、Qt界面与业务逻辑的组织方式并结合自身需求定制专属版本是学习Linux串口编程和工具开发的优质范例也适合作为二次开发的基础项目。1. 先用cutecom换掉你的minicom一款自带源码的Linux图形串口助手调试嵌入式板卡、路由器或者单片机的时候minicom那种全黑终端界面的效率确实不高参数改一下就要翻半天菜单收发文件还得记住一堆快捷键。Linux串口工具cutecom全称cutecome实际是“cute COM”的连写是个基于Qt的图形化串口助手源码开放能直接看到串口参数下拉框、十六进制显示开关、收发日志区域还内置了发送文件功能不用另开终端敲rz/sz命令。第一次用cutecom的人通常十分钟内就能把数据收起来比对着minicom说明书敲按键快得多。这篇文章把cutecom从源码编译、参数配置到文件传输的完整使用方法和盘托出踩坑部分是基于真实调试经历写的照着做能少走很多弯路适合嵌入式Linux开发者、硬件调试工程师以及刚入门串口通信的读者。2. 编译cutecom源码前的准备Qt环境、依赖库与最小构建命令2.1 从源码到可执行文件qmake与make的完整流程cutecom是典型的Qt项目源码根目录下通常有.pro文件比如cutecom.pro用qmake生成Makefile再用make编译。很多人第一次编译挂掉绝大多数情况是Qt环境没装全或者装的是Qt6但项目还停留在Qt5时代。常见做法是先确认系统里有没有qmake没有就装。以Debian/Ubuntu为例三条命令把基础依赖拉齐sudo apt update sudo apt install qtbase5-dev qt5-qmake libqt5serialport5-dev libudev-dev qmake --version第一行更新软件源第二行把Qt5的开发头文件、qmake工具、串口模块库和udev开发库一起装上。libqt5serialport5-dev是cutecom操作串口的关键依赖如果没有这个库编译时会直接报QSerialPort相关头文件找不到。libudev-dev是用于枚举串口设备的缺失时编译也能过半但运行时设备列表可能刷不出来。装完执行qmake --version能输出版本信息说明环境正常。依赖就绪后进入源码目录按顺序执行构建命令cd cutecom qmake make -j4 sudo make installqmake不带参数时项目里如果只有一个.pro文件Qt会自动识别并生成Makefile。如果目录下有多个.pro或者出现“Project file not found”的提示就得显式指定例如qmake cutecom.pro。make -j4是四线程并行编译老机器改成make -j2更稳。编译结束后当前目录会出现一个可执行文件叫cutecomsudo make install默认会把它安装到/usr/local/bin同时把图标和桌面文件装到系统目录。不想装进系统的话也可以直接./cutecom运行区别只是全局命令是否可用。编译期间最常见的报错是main.cpp: error: QSerialPort: No such file or directory这条显然指向libqt5serialport5-dev没装。还有一种报错是cannot find -lGL这是Qt的OpenGL链路没配好Ubuntu上执行sudo apt install libgl1-mesa-dev可以解决。如果编译过程里出现undefined reference to udev_...之类的链接错误则补libudev-dev后运行make clean再重新make盲目直接重新编译有时会残留旧的对象文件导致报错反复出现。2.2 依赖装不全时的三种典型报错从Qt缺失到libudev依赖问题在编译cutecom时绕不开这里把高频报错总结成一组排查思路。第一类报错是Qt5 serialport not found或者Project ERROR: Unknown module(s) in QT: serialport。这类信息出现在qmake阶段原因是qtbase的串口模块没装尤其常见于换过Qt源、安装了多个Qt版本的系统。解决方式是用apt list --installed | grep qt5确认已装的Qt组件再补装qtbase5-dev和libqt5serialport5-dev。如果系统同时装了Qt5和Qt6qmake可能指向Qt6这时要重新登录会话或手动指定Qt5的qmake路径常见的路径是/usr/lib/qt5/bin/qmake。第二类报错是编译期fatal error: QSerialPortInfo: No such file or directory。QSerialPortInfo负责枚举系统里所有串口设备是cutecom下拉列表的数据来源。这个头文件同样来自libqt5serialport5-dev不是单独一个库装了serialport模块后问题自动消失。第三类报错发生在make的链接阶段比如undefined reference to udev_device_new_from_syspath。这说明系统里缺少libudev的开发符号。Ubuntu上libudev通常随systemd一起存在但是开发头文件是独立包。执行sudo apt install libudev-dev后重新make clean make就能链接成功。如果是交叉编译环境需要在qmake命令后面加LIBS -ludev或者在.pro文件里检查是否有对应配置。提示编译前先grep -i serialport cutecom.pro看一下项目对Qt模块的声明能直接判断是模块缺失还是qmake版本指向错误省得反复清理重编。2.3 交叉编译到嵌入式Linux板卡参数与路径调整cutecom最常见的落地场景就是嵌入式Linux项目板子上空间有限源码放在宿主机编译二进制拷过去跑。交叉编译的本质是使用目标平台的工具链替代gcc并告诉Qt库的目标架构。这里以一个常见的ARM开发板为例工具链前缀是arm-linux-gnueabihf-Qt库已经交叉编译并安装到/opt/qt5-arm目录那么编译命令大概是这样的qmake -spec linux-arm-gnueabihf-g \ QT_SERIALPORT_PREFIX/opt/qt5-arm \ PREFIX/usr/local \ cutecom.pro make -j4-spec指定Qt提供的交叉编译规格文件文件名一定要和工具链匹配写成linux-arm-gnueabihf-g是常见的mkspec名称。QT_SERIALPORT_PREFIX是告诉qmake到/opt/qt5-arm去找Qt串口模块的头文件和库文件这个变量名在不同Qt版本里略有差异部分旧版项目是靠QMAKE_LIBDIR和INCLUDEPATH手动指定的。PREFIX决定之后make install的安装路径交叉编译时不建议装到宿主机直接make install INSTALL_ROOT/path/to/rootfs把文件安装到目标根文件系统目录里。实际翻车经常出在mkspec路径上。宿主机安装的Qt5默认自带一堆mkspec但是针对ARM的规格文件不一定齐全报错Spec linux-arm-gnueabihf-g not found时就去/usr/lib/qt5/mkspecs目录下看看有没有对应文件夹。缺失的话常见做法是复制一份linux-arm-gnueabi-g改名或者在.pro文件里手动指定QMAKE_CXX和QMAKE_LINK指向交叉工具链。还有一点很容易被忽视目标板上的Qt库版本和宿主机编译用的qmake版本相差过大运行起来会报symbol lookup error所以交叉编译前先确认板子上的libQt5SerialPort.so.5的版本号宿主机qmake对应的Qt版本尽量一致。3. 串口参数配置与连接管理从波特率到流控的逐项说明3.1 打开串口前的参数设置波特率、数据位、校验位与停止位cutecom主界面上的参数区域一眼可见和Windows下的串口助手非常像这也是它容易上手的原因。连接设备前必须把参数和对方对齐否则收到的全是乱码。参数项从左到右依次是波特率、数据位、校验位、停止位和流控。波特率常见值有9600、115200、460800、921600大多数MCU默认固件用115200GPS模块常走9600高速4G模组会用460800甚至更高。这里建议先用设备手册上的波特率去连乱码可能性最大的是这一点。数据位几乎不用动默认8。校验位要看设备是否配置了奇偶校验比较老的工业仪表会用Even偶校验新设备基本都设None。停止位默认1特殊场景用2。最后是流控常见选项是None和HardwareModem之类的设备会用到CTS/RTS流控普通TTL串口模块选None即可。连接前还有一个动作确认串口设备节点。插入USB转串口模块后系统一般会生成/dev/ttyUSB0原生串口是/dev/ttyS0。在cutecom的设备下拉框里找不到设备时先到终端里查看ls -l /dev/ttyUSB* /dev/ttyS* dmesg | tail -20第一行列出当前存在的串口节点第二行看内核日志里有没有usb 1-1: ch341-uart converter now attached to ttyUSB0这类信息。如果内核日志里没有新设备插入的痕迹说明驱动没加载或者硬件没识别和cutecom本身无关。设备节点对应的权限也要检查ls -l看到crw-rw----说明属于dialout组当前用户不在这个组时打开就会失败。把用户加进组是常见做法sudo usermod -aG dialout $USER提示改完组重新登录才生效临时不想重启可以执行newgrp dialout切换当前会话的组身份。3.2 打开与断开串口的交互逻辑设备节点变化与重连处理cutecom的打开按钮是一个开关式的“Open/Close”按钮点击后如果串口打开成功界面底部的状态栏会出现波特率和设备节点信息紧接着开始接收数据。如果目标设备是即插即用的USB转串口拔插后设备节点可能从ttyUSB0变成ttyUSB1这时不需要重启cutecom重新在下拉框选对节点就能再开。但有一种情况是串口被别的进程占用了比如之前开过minicom或者另一个cutecom实例没退出操作系统只允许一个进程独占打开串口除非显式设置非独占模式此时cutecom会弹出“Cannot open”之类提示。排查方式很简单ps aux | grep -E cutecom|minicom sudo lsof /dev/ttyUSB0第一行查有哪些终端程序还挂在后台第二行查具体是哪个进程占用了当前节点找到后杀掉或者关闭对应窗口即可。cutecom自身在多开时也要注意同一个串口同时被两个实例打开第二个实例大概率报错这是内核串口驱动的默认行为不是bug。实际调试中还有一个习惯值得养成每次重新插拔USB转串口线后先点一次Close再点Open。因为某些USB转串口芯片比如CH340、CP2102在拔插瞬间会让驱动重置应用层持有的文件描述符已经失效直接继续Read会一直超时。重新打开的过程实际上强制关闭旧描述符并重新初始化能省去很多“串口是不是坏了”的排查时间。3.3 用参数表对照你的设备常见外设的推荐配置串口参数组合并不多但每种外设的规范差异会让新手摸不着头脑。下面这张表是我在实际项目里验证过的参数组合照着匹配大多数设备都能正常收发。设备类型波特率数据位校验位停止位流控备注STM32默认固件1152008None1None最常见组合GPS模块NMEA协议96008None1None可尝试384004G模组EC20类1152008None1NoneAT指令交互工控仪表Modbus RTU96008Even1None老设备多为偶校验蓝牙串口模块HC-0596008None1NoneAT模式可设波特率路由器Console口1152008None1None部分设备需流控None这套配置的共性是数据位8、停止位1、无校验这也是当前串口调试的默认基线。只有当设备手册明确写了“Even”或者“2 Stop Bits”时才需要改动。流控一项最容易栽跟头很多USB转串口线在物理上没有联机RTS/CTS引脚如果软件勾选了Hardware流控双方握手信号永远拉不起来表现为“能打开但收不到数据”。遇到这种情况先在流控里切到None试一次比调别的参数更有效。4. 发送文件功能的实现逻辑协议选择、超时重传与进度反馈4.1 XMODEM/YMODEM/ZMODEMcutecom里发送文件背后的三种协议cutecom的发送文件功能写在“Send File”菜单里点击后可以选择传输协议。这三个协议不是cutecom独有而是串口文件传输领域的老牌标准。XMODEM是最基础的一种把文件切成128字节的数据块每个块带校验接收方收到一个块回一个确认帧错了就重发。优点是最简单、几乎任何串口终端都支持缺点是效率低而且不支持文件名传输。YMODEM是XMODEM的改进版数据包长度可选1024字节传输前先把文件名、大小等信息通过开始帧告知接收端可以传多个文件。ZMODEM是三者里最智能的支持断点续传、自动重发、更高效的批量传输但接收端程序必须支持ZMODEM协议不是所有设备都带。cutecom里这三个选项的位置不一定显眼常见做法是点击“Send File”后在弹出的对话框里选择协议类型然后点击“Send”。选哪个协议取决于接收端是什么。如果接收端是开发板上的Bootloader或者出厂升级程序它们通常会固定支持YMODEM或XMODEM因为这类协议实现简单、代码占用小适合烧录固件。如果接收端是PC上的串口调试助手用来互传文件ZMODEM是最省心的选择。我自己调试时的原则是不确定对方支持什么先用XMODEM它最保守如果设备手册写了“YMODEM upgrade”就用YMODEM速度更快ZMODEM留给双方都能确认支持的环境。注意cutecom发送文件时发送方会暂时屏蔽用户手动输入进度条在底部显示。如果进度条长时间停在0%先检查是不是流控问题再看接收端有没有进入接收模式。4.2 发送文件时的参数包长、超时与重试次数选择协议后对话框里通常还有几个可调参数最常见的是数据包长度和超时时间。XMODEM固定128字节YMODEM可以选择1024或128ZMODEM一般由协议自动协商。包长越大同样大小的文件需要的帧数越少吞吐量越高但出错后重传的成本也越高信道质量差比如长线、干扰大的场合更适合128字节短包。cutecom的具体选项可能是“Packet Length”也可能是“Block Size”不同版本叫法不同。超时和重试次数是文件传输稳定性的关键。串口传输不像网卡有硬件校验接收方一个字节没收到整个数据块都可能校验失败。超时参数决定发送方等多久没收到确认就重发一般建议设置3到5秒太短会在设备处理缓慢时误重发太长则一旦设备真的死掉等待时间让人难以忍受。重试次数表示同一个数据块最多尝试几次超过次数后会话自动中止。常见的安全组合是超时3秒、重试10次。如果传输环境有强电磁干扰可以把重试调高到20次但也要意识到重试过多说明物理链路本身有问题传完也可能校验不过。一个容易被忽略的参数是“文件的打开方式”。cutecom读取文件时如果按文本模式处理遇到换行符可能做转换导致二进制的固件包损坏。在cutecom里发送二进制文件比如.bin、.hex前确认文件是作为原始数据读取的。不同版本的cutecom在这块处理不同有的直接按二进制读取有的依赖Qt的QIODevice默认行为后者在Windows上尤其容易出换行符问题Linux上通常没事。如果发送后接收端报“校验错误”优先怀疑这个问题。4.3 接收端的配合从设备端看文件传输的常见握手流程文件传输不是cutecom单方面把数据丢到串口就完事接收端必须运行对应的接收协议程序。嵌入式设备上最常见的接收程序是lrzsz提供rz和sz命令设备端执行rz等待接收PC端cutecom选择YMODEM或ZMODEM发送两边对上暗号就能传。整个过程的手握大致是发送方先发一个起始帧包含文件名、大小接收方收到后回确认双方进入数据帧循环。在cutecom点击发送前一定要先确保设备端已经进入接收等待状态。如果设备端没执行rz发送方会一直在“等待启动确认”的状态进度条不动直到超时。一个经常发生的场景是开发板上的应用程序没有任何接收协议支持只是裸串口接收字节。这时候cutecom的XMODEM发送对板子来说就是普通数据会不会把文件拼出来完全看板子端程序怎么处理。cutecom本身只能保证“把文件以指定协议发出去”不负责接收端的解析。所以如果板子是做产品化的固件里通常会集成YMODEM接收代码这是嵌入式Linux项目里最常见的做法。设备端如果跑的是BusyBox它自带的部分版本也包含rz支持。我做过一个测试设备端rz加cutecom的ZMODEM发送传一个几十MB的日志文件配合流控关闭速度比XMODEM快好几倍文件哈希完全一致。5. 排查与避坑cutecom使用中我踩过的五个具体问题5.1 现象Open按钮始终报“open failed”但设备节点确实存在插入USB转串口模块后ls /dev/ttyUSB0能看到设备但cutecom一点打开就弹open failed: Permission denied。原因几乎都是当前用户不在dialout组权限位是crw-rw----只有root和dialout组成员能读写。很多桌面Linux发行版刚装完默认用户不在这个组里。解决就是上面提到的sudo usermod -aG dialout $USER重新登录后生效。如果加了组还不行查看一下ls -l /dev/ttyUSB0的所属组是不是dialout有些自定义udev规则会把它改成别的组那就把用户加进那个组或者写一条规则固定权限。5.2 现象发送文件到一半进度条卡住随后整条串口会话假死某次给板子传固件YMODEM传到37%突然不动cutecom界面还能点但再也收不到设备端的任何输出关闭重开串口也没用。最后定位到是硬件流控的坑USB转串口线不支持RTS/CTS但cutecom里设置的是Hardware流控接收端发的流控信号根本到不了。传输进行到缓冲区满的那一轮双方都以为对方“忙”于是彻底死锁。解决方式是把流控改成None重新传文件一次通过。更麻烦的一种情况是设备端固件强制开了流控即使cutecom这边选None设备端CTS引脚拉不起来仍然不肯继续发数据。遇到这种设备检查一下硬件连线是否有RTS/CTS交叉接好没有的话只能用软件流控或降低波特率绕过去。5.3 现象十六进制显示打开后数字乱飞无法人眼阅读cutecom自带Hex Display功能用十六进制显示接收数据在处理二进制协议时很管用。但开了之后界面上一行行字节连在一起很难找帧头。这不是工具坏了而是“协议帧解析”的需求本身不该用原始Hex视图解决。常见做法是先把数据保存到文件再用xxd或hexdump做格式化。cutecom的日志记录功能可以把原始数据完整存下来然后命令行处理xxd -g1 -c16 received.log这样每行固定16字节帧头帧尾一目了然。如果你需要实时看hex也可以在cutecom里同时打开“ASCII Display”两列对照显示减少翻转脑子的负担。cutecom的显示缓冲默认有限长时间跑数据时多注意必要时先暂停再分析。5.4 现象设备一接上电脑系统直接重启或内核模块崩溃这种情况和cutecom无关但因为它“一打开就出事”很多人在cutecom里反复排查参数浪费一整晚。USB转串口芯片的驱动在内核空间运行CH340、PL2303这些老芯片和现代内核偶有兼容问题。表现是插上USB线后系统日志里出现BUG: unable to handle kernel NULL pointer dereference甚至直接重启。解决方向是更新内核到较新版本或者检查主板上是否同时插入了冲突的串口设备。如果项目里大批量使用某种USB转串口模组建议先在无桌面环境、纯串口控制台的系统上试一轮排掉内核因素再让cutecom上场。5.5 现象日志保存功能写出的文件是空白的cutecom的日志记录可以自动带时间戳写入文件方便事后分析。有段时间我把日志路径设成一个带中文的目录结果保存下来始终是0字节。排查发现是Qt版本对该目录的写入权限判断异常而且路径里有空格时也出现过类似问题。解决方式是把日志路径改成简单的绝对路径比如/home/用户名/logs/uart.log目录先mkdir建好避免让程序自己去建多层目录。另外记录开始后要稍等几秒再打开文件查看cutecom是缓冲写入退出前最后一个缓冲区可能没落盘。更稳的做法是定期点“Pause”或直接停止日志再拷贝文件。6. 把cutecom变成调试工具链的一环命令行启动、日志回放与自动化验证cutecom不是只能靠鼠标点它支持用命令行参数直接指定串口和波特率这为脚本化调试留下一条通路。一种常见的传参方式是cutecom -d /dev/ttyUSB0 -b 115200版本不同选项名略有差异执行cutecom --help能列出当前支持的参数。有了这个入口就可以把cutecom提前预设在特定设备节点上插上USB线快速弹出界面。我自己的习惯是在写板卡驱动之前先用cutecom手动确认收发链路然后把同样的数据流存成日志作为后续自动化测试的基线。配合script和timeout这两个Linux常用命令还能做到无人值守的串口会话记录拿回来对比板卡在不同固件版本下的输出差异。具体做法是启动cutecom记录原始日志同时用dmesg观测驱动状态双份证据对照出了问题能快速区分是应用层还是内核层。如果发现某个设备节点反复在cutecom里消失我会写一条udev规则固定设备符号链接例如把特定USB序列号的设备映射成/dev/ttyEmbedded这样即便拔插后内核分配的ttyUSB号变了cutecom连接的目标也不会变。这个习惯让我免去了很多“节点头不对”的低级错误。cutecom适合当调试链路的起点但它的定位是图形化工具复杂的自动化回归测试还是要用Python的pyserial或C的termios去写。记住这个分工cutecom负责“看得见、手动发、快速验”脚本负责“批量跑、断言对、出报告”。如果只能带一个小程序上现场调试我会带cutecom如果要写产线测试方案cutecom源码里的串口参数解析和文件发送逻辑是现成的参考实现照着它的协议状态机写比从零搞XMODEM省太多事。希望这些经验帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑