首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ser_open():无法打开设备"/dev/ttyACM1":输入/输出错误

ser_open():无法打开设备"/dev/ttyACM1":输入/输出错误
EN

Unix & Linux用户
提问于 2021-04-14 11:16:52
回答 3查看 3.1K关注 0票数 2

我在arch linux上使用arduino ide,通过USB连接arduino uno。我确信我在ide菜单中选择了正确的端口和板。

当我运行ls -l /dev/ttyACM*时,我得到:

代码语言:javascript
运行
复制
crw-rw---- 1 root uucp 166, 0 14. dub 12.44 /dev/ttyACM0
crw-rw-rw- 1 root uucp 166, 1 14. dub 12.54 /dev/ttyACM1

但是,当我单击upload时,我会得到以下错误:

代码语言:javascript
运行
复制
Sketch uses 440 bytes (1%) of program storage space. Maximum is 32256 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.

avrdude: Version 6.3, compiled on Jul  7 2020 at 19:38:43
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "//etc/avrdude.conf"
         User configuration file is "/home/john/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/ttyACM1
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
avrdude: ser_open(): can't open device "/dev/ttyACM1": Input/output error

avrdude done.  Thank you.

the selected serial port 
 does not exist or your board is not connected

在最新的linux内核和LTS上仍然存在错误。

我的设备是联想thinkpad X390: Linux5.11.14-arch1-1

当我将arduino插入usb,然后运行sudo dmesg时,我会得到以下消息:

代码语言:javascript
运行
复制
[ 1605.378324] usb 1-4: new full-speed USB device number 14 using xhci_hcd
[ 1605.520509] usb 1-4: New USB device found, idVendor=2341, idProduct=0043, bcdDevice= 0.01
[ 1605.520517] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[ 1605.520521] usb 1-4: Manufacturer: Arduino (www.arduino.cc)
[ 1605.520523] usb 1-4: SerialNumber: 7583434383935150E152
[ 1605.523881] cdc_acm 1-4:1.0: ttyACM1: USB ACM device
[ 1630.618749] usb 1-9: reset full-speed USB device number 10 using xhci_hcd
[ 1630.792727] audit: type=1130 audit(1618567069.016:82): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=fprintd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[ 1632.601215] audit: type=1100 audit(1618567070.822:83): pid=29714 uid=1000 auid=1000 ses=1 msg='op=PAM:authentication grantors=? acct="john" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/1 res=failed'
[ 1635.720577] audit: type=1100 audit(1618567073.942:84): pid=29714 uid=1000 auid=1000 ses=1 msg='op=PAM:authentication grantors=pam_faillock,pam_permit,pam_faillock acct="john" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/1 res=success'
[ 1635.721507] audit: type=1101 audit(1618567073.942:85): pid=29714 uid=1000 auid=1000 ses=1 msg='op=PAM:accounting grantors=pam_unix,pam_permit,pam_time acct="john" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/1 res=success'
[ 1635.722751] audit: type=1110 audit(1618567073.946:86): pid=29714 uid=1000 auid=1000 ses=1 msg='op=PAM:setcred grantors=pam_faillock,pam_permit,pam_faillock acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/1 res=success'
[ 1635.727018] audit: type=1105 audit(1618567073.949:87): pid=29714 uid=1000 auid=1000 ses=1 msg='op=PAM:session_open grantors=pam_limits,pam_unix,pam_permit acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/1 res=success'

我怎么才能解决这个问题?

谢谢你的帮助

如果你需要更多的信息,下面的评论,我会尽快添加。

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2021-04-22 08:21:41

我也遇到了同样的问题,唯一的解决办法就是禁用grub配置中的usb自动挂起。

在禁用它后,我可以使用我的arduino板罚款。

所以我做了:

  1. sudo vim /etc/default/grub
  2. 搜索这一行GRUB_CMDLINE_LINUX_DEFAULT="" (它可能已经在引号中填充了不同的内容)
  3. 将其更改为在引号中的某个位置包含usbcore.autosuspend=-1
  4. 运行sudo update-grub
  5. 然后重新启动

这对我很有帮助,因为我在谷歌上搜索了很多次之后,意识到问题实际上是,每当我尝试使用arduino时,arduino就会重新连接。因此,当使用minicom访问串行输出时,arduino立即断开连接并再次连接。我只在使用watch -n 1 ' sudo dmesg | tail -n 20'查看运行minicom时会发生什么时才注意到这一点。

此行为应在禁用grub中的自动挂起后更改。

票数 2
EN

Unix & Linux用户

发布于 2021-05-09 05:52:42

一个为我工作的解决方案来源于这里

我在做更多的测试,为我找到了另一个解决方案。您是否安装并启用了tlp?显然,有一种叫做usb自动挂起的东西,tlp默认启用它(这可能是明智的)。我所做的就是编辑文件/etc/tlp.conf并更改#USB_AUTOSUSPEND=1 -> USB_AUTOSUSPEND=0。在重新启动之后,我能够上传到arduino,甚至在最新的5.11.16内核上也是如此。我试图通过udev规则禁用自动挂起,但我做不到。我认为也许tlp配置优先于udev规则,尽管我一点也不确定。

票数 3
EN

Unix & Linux用户

发布于 2021-04-21 14:51:56

看起来最近的Manjaro更新导致了cdc_acm模块的中断。为了解决这个问题,我运行了以下命令:

  1. sudo modprobe -r cdc_acm
  2. sudo modprobe cdc_acm
  3. sudo chmod 666 /dev/ttyACM0
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/645033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档