Home 串口工具-minicom
Post
Cancel

串口工具-minicom

Basic

对于linux下的串口设备文件,(通常为 /dev/ttyUSB*,/dev/ttyACM*,/dev/ttyS*或其他设备自定义名称设备文件), 一般可以通过拔插串口设备并配合dmesg查看内核最后的信息,来确定最近接入的串口设备对应哪个或哪几个设备文件。

在linux发行版中常见的可用于串口交互的工具如 minicom,putty。这里主要记录minicom工具,putty工具是图形化界面 的程序,使用较简单,sudo apt install putty安装后,运行后使用”serial”模式,即为串口模式。

安装和使用

minicom工具的安装同样类似 sudo apt install minicom。也有man page手册,不过一般不需要查看。 minicom工具本身不需要root权限,但是它需要打开串口设备文件,一般还是需要root权限来运行的,或者对串口设备文件添加相关权限也可行。

一些tips

常规使用方式

运行 (尤其是首次运行)

1
sudo minicom -s

即进入minicom配置,随后在文本交互页面中选择 -> Serial port setup ,之后选择相应的串口设备文件波特率等,另外,根据实际情况开关软硬件流控

有时遇到minicom无法输入的问题,如果不是设置不对,很可能就是没有关闭流控,现在的串口基本不会使用流控,但minicom默认是打开硬件流控的!! 所以确认关闭,通常就能输入了

设置完毕后,可以进一步保存设置,选择 -> Save setup as dfl

之后选择退出设置,进入串口交互。

控制面板

运行中呼出控制面板,英文输入法下,先press CTRL-A ,再按 Z。常用功能包括:

  • 退出minicom : X
  • 开启和关闭时间戳 : M
  • 开启和关闭日志捕获 : L
  • 回滚查看上文 : B
  • 清屏 :C

记住字母对应功能后,可以直接键入 CTRL-A , X 就是直接退出了,其他同理。

权限问题

由于设备文件的权限通常为 0660 ,一般用于对应others,是没有读写权限的。串口设备文件也是如此。正是因为该情况,所以minicom通常使用sudo运行。

也可以对串口设备文件加上 0006 权限,但不太方便,建议还是直接使用sudo运行minicom。

此外,还可以使用 udev 工具,自动为相关设备文件设置指定权限,也可以解决: 编辑文件/etc/udev/rules.d/70-ttyusb.rules,添加如下内容即可。

1
KERNEL=="ttyUSB[0-9]*", MODE="0666"

之后,系统中创建ttyUSB设备文件时,会为其设置0666权限。

命令行参数

minicom在启动时,除了基本的 -s参数,(-s表示进入minicom交互式设置),还有其他参数,命令行参数优先级更高,使用时会override配置文件中的参数。 单次使用更方便,如:

  • -D, --device : 指定设备文件,如 -D /dev/ttyUSB1
  • -C, --capturefile=FILE : 打开抓取日志,并记录到 FILE 对应的文件中
  • -H, --displayhex : hex 输出模式,有时调二进制相关的可以使用

简化操作

由于linux的设备文件,命名是动态后缀。根据系统中已分配的同类设备号情况,新接入的串口设备文件名也不同,所以需要用户自己看一下内核信息,拔插一下,看看 dmesg -w 的打印,确定新接入的串口设备对应哪个设备文件。一般是 ttyUSB*,有的会出现ttyACM*,ttyS等,有时还会是其他的自定义的名字。

使用时,可以写个shell函数,方便自己选择,而不是手写。参考:

alias方式
较简单,定义在 ~/.bashrc 中。场景:根据ttyUSB后缀数字打开对应串口。另外,由于其他同事也需要时常打开串口串口信息, 但一直不关闭,因为是相同的串口,就要先帮他关闭,再重新打开了,被kill的minicom终端需要reset一下。以下方式会kill所有 minicom程序如果需要指定kill需要的单个,需要修改pid检索方式,可以使用grep配合awk实现。

1
2
# 简化minicom输入,强制关闭已存在串口,并显示可用的串口
alias minicom='sudo bash -c "{ ls /dev/ttyUSB* ; echo -n choose ttyUSB No: ; read TTYUSBNO ;echo \"select /dev/ttyUSB\$TTYUSBNO\"; kill -n 9 `ps -C minicom -o pid=` ;  /usr/bin/minicom  -D /dev/ttyUSB\$TTYUSBNO;}"'

函数方式
更容易编写,同样定义在~/.bashrc,定义为一个shell函数。~/.bashrc文件本身是一个会被source的脚本文件,可以直接在里面定义函数,编写更方便。

来着网络参考,补充了日志文件的基于时间记录。根据需要修改即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
com() {
    ports_USB=$(ls /dev/ttyUSB*)
    ports_ACM=$(ls /dev/ttyACM*)  #arduino
    # or others
    ports="$ports_USB $ports_ACM"
    datename=$(date +%Y%m%d-%H%M%S)
    select port in $ports;do
        if [ "$port" ]; then
            echo "You select the choice '$port'"
            minicom -D "$port" -C /tmp/"$datename".log "$@"
            break
        else
            echo "Invaild selection"
        fi
    done
}

部分内容参考:https://cloud.tencent.com/developer/article/1560511

This post is licensed under CC BY 4.0 by the author.