我通过串口进行 arduino 通信/dev/ttyACM0
,我可以通过屏幕打开它:
$ screen /dev/ttyACM0 115200
但由于某种原因,我没有权限通过 minicom 打开它:
$ minicom /dev/ttyACM0 -b 115200
minicom: cannot open /dev/tty8: Άρνηση πρόσβασης
我的用户在dialout
组中:
$ groups
pcmagas adm dialout cdrom sudo dip plugdev lpadmin sambashare wireshark kvm docker
$ whoami
pcmagas
有什么想法吗? AFAIK arduino使用FTDI芯片,内核使用的模块是cdc_acm
:
$ udevadm info --query=all --name=/dev/ttyACM0
P: /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/tty/ttyACM0
N: ttyACM0
S: android0
S: serial/by-id/usb-Arduino__www.arduino.cc__0043_7533131313335170A061-if00
S: serial/by-path/pci-0000:00:14.0-usb-0:3:1.0
E: DEVLINKS=/dev/serial/by-id/usb-Arduino__www.arduino.cc__0043_7533131313335170A061-if00 /dev/android0 /dev/serial/by-path/pci-0000:00:14.0-usb-0:3:1.0
E: DEVNAME=/dev/ttyACM0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/tty/ttyACM0
E: ID_BUS=usb
E: ID_MM_CANDIDATE=1
E: ID_MODEL=0043
E: ID_MODEL_ENC=0043
E: ID_MODEL_FROM_DATABASE=Uno R3 (CDC ACM)
E: ID_MODEL_ID=0043
E: ID_PATH=pci-0000:00:14.0-usb-0:3:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_0
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
E: ID_REVISION=0001
E: ID_SERIAL=Arduino__www.arduino.cc__0043_7533131313335170A061
E: ID_SERIAL_SHORT=7533131313335170A061
E: ID_TYPE=generic
E: ID_USB_CLASS_FROM_DATABASE=Communications
E: ID_USB_DRIVER=cdc_acm
E: ID_USB_INTERFACES=:020201:0a0000:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Arduino__www.arduino.cc_
E: ID_VENDOR_ENC=Arduino\x20\x28www.arduino.cc\x29
E: ID_VENDOR_FROM_DATABASE=Arduino SA
E: ID_VENDOR_ID=2341
E: MAJOR=166
E: MINOR=0
E: SUBSYSTEM=tty
E: TAGS=:systemd:
E: USEC_INITIALIZED=9517655754
虽然通过将-D
参数传递到 minicom 确实打开了:
minicom -D /dev/ttyACM0 -b 115200
但我不明白为什么-D
需要参数。这是因为plugdev
使用了设备组吗?
ll /dev/ttyACM0
crw-rw---- 1 root plugdev 166, 0 Αυγ 11 13:05 /dev/ttyACM0
答案1
minicom
如果没有该选项,实际上并不接受命令行上的设备名称-D
。如果指定了非选项参数,它将用作 Minicom 配置文件的后缀。
如果您指定,它实际上会尝试读取或minicom /dev/ttyACM0
处的配置文件。/etc/minicom/minirc./dev/ttyACM0
~/.minirc./dev/ttyACM0
预期用途是这样的:
- 在设置模式下启动 Minicom,为新配置指定所需的名称,例如
minicom -s arduino
。或者,您可以使用其他选项在此处指定端口和速度,例如minicom -D /dev/ttyACM0 -b 115200 -s arduino
。 - 转至
Serial port setup
菜单,将“串行设备”(项目A
)更改为/dev/ttyACM0
,并将 BPS/奇偶校验/位(项目E
)更改为 115200 8N1(或您的设备所需的任何内容。还根据需要设置硬件和软件流控制(项目F
和G
)。 - 按Esc键返回配置菜单,选择
Save setup as arduino
,然后选择Exit from Minicom
- 现在 Minicom 已配置完毕,您可以使用您保存的端口、速度和流量控制设置来启动它,只需
minicom arduino
.
如果您以 root 身份进行配置,设置将保存到/etc/minicom/minirc.arduino
,并且系统上的所有用户都可以使用(假设/etc/minicom
所有人都可读);如果您以普通用户身份执行此操作,设置将被保存到~/.minirc.arduino
该用户帐户中并且仅可供该用户帐户使用。
答案2
minicom 的手册页解释了-D
命令行选项:
-D, --device
Specify the device, overriding the value given in the configuration file.
minicom
是一个严重受其配置文件控制的程序,并且在您的计算机上,配置文件没有/dev/ttyACM0
.该screen
程序可以在其命令行上获取设备的名称,但minicom
期望以不同的方式指定设备,除非您提供正确的命令行选项。在这种情况下-D
。