Arduino: avrdude: ser_open(): "/dev/ttyACM1" デバイスを開けません: 入力/出力エラー

Arduino: avrdude: ser_open(): "/dev/ttyACM1" デバイスを開けません: 入力/出力エラー

私はアーチLinuxでarduino ideを使用しており、USB経由でarduino unoを接続しています。 ideメニューで正しいポートとボードを選択したことを確認しました。

私が実行すると、ls -l /dev/ttyACM*次のようになります。

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

ただし、アップロードをクリックすると、次のエラーが表示されます。

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にはまだバグがあります。


私のデバイスはLenovo thinkpad X390:Linux 5.11.14-arch1-1です。


ArduinoをUSBに接続して実行すると、sudo dmesg次のメッセージが表示されます。

[ 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'

この問題をどのように解決できますか?
ご協力ありがとうございます

添付:より多くの情報が必要な場合は、以下にコメントを残してください。できるだけ早く追加します。

答え1

ソリューションソースこここれは私にとって効果的です。

私はもう少しテストをして、もう一つの効果的な解決策を見つけました。tlpインストールして有効にしましたか?

明らかにUSB自動サスペンドということがあり、tlpはデフォルトでそれを有効にします(おそらく賢明でしょう)。私がしたことは、ファイルを編集して/etc/tlp.conf変更した#USB_AUTOSUSPEND=1だけですUSB_AUTOSUSPEND=0。再起動後、最新のカーネル5.11.16でもarduinoにアップロードできました。

udevルールを使用して自動サスペンドを無効にしようとしていますが、無効にすることはできません。tlpおそらくはわかりませんが、設定がudevルールよりも優先されると思います。

答え2

私は同じ問題があり、私に役立つ唯一の解決策は、グラブ構成でUSB自動サスペンドを無効にすることでした。

無効にした後は、Arduinoボードを正常に使用できます。

だから私はこれをしました:

  1. sudo vim /etc/default/grub
  2. この行を検索してくださいGRUB_CMDLINE_LINUX_DEFAULT=""(引用符が他の内容で埋められている可能性があります)。
  3. usbcore.autosuspend=-1引用符の中にどこかを含めるように変更します。
  4. 走るsudo update-grub
  5. その後、再起動してください

これは、多くのインターネット検索の後に実際にArduinoを使用しようとするたびに再接続されるという問題があることに気づいたので役に立ちました。したがって、minicomを使用してシリアル出力にアクセスすると、Arduinoはすぐに切断され、再接続されます。私はwatch -n 1 ' sudo dmesg | tail -n 20' minicomを実行しているときに何が起こっているかを確認するために使用したときにのみそれを見つけました。

この動作は、grub内で自動サスペンドを無効にした後に変更する必要があります。

答え3

最新のマンジャロアップデートで何とか発生したようです。CDC_acm破壊するモジュール.. この問題を解決するために、次のコマンドを実行しました。

  1. sudo modprobe -r cdc_acm
  2. sudo modprobe cdc_acm
  3. sudo chmod 666 /dev/ttyACM0

関連情報