avrdude: usbdev_open(): невозможно открыть устройство: в доступе отказано

Я пытаюсь загрузить что-либо в свой Arduino Uno Wifi Rev2, я использую Arch Linux, но у меня не получается со следующей ошибкой, будь то через IDEv2 или arduino-cli:

avrdude: usbdev_open(): невозможно открыть устройство: доступ запрещен

avrdude: jtag3_open_common(): не найдено ни одного устройства, соответствующего VID 0x03eb и списку PID: 0x2145

Разрешения устройства:

crw-rw-rw- 166,0 root uucp  9 Jan 23:22 /dev/ttyACM0

Мое правило udev:

KERNEL=="ttyACM[0-9]",MODE="0666",GROUP="uucp",TAG+="uaccess"

lsusb:

Bus 001 Device 005: ID 03eb:2145 Atmel Corp. ATMEGA328P-XMINI (CDC ACM)

Первые две записи из udevadm info -a -n /dev/ttyACM0:

  looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.1/tty/ttyACM0':
    KERNEL=="ttyACM0"
    SUBSYSTEM=="tty"
    DRIVER==""
    ATTR{power/control}=="auto"
    ATTR{power/runtime_active_time}=="0"
    ATTR{power/runtime_status}=="unsupported"
    ATTR{power/runtime_suspended_time}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.1':
    KERNELS=="1-3:1.1"
    SUBSYSTEMS=="usb"
    DRIVERS=="cdc_acm"
    ATTRS{authorized}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceClass}=="02"
    ATTRS{bInterfaceNumber}=="01"
    ATTRS{bInterfaceProtocol}=="01"
    ATTRS{bInterfaceSubClass}=="02"
    ATTRS{bNumEndpoints}=="01"
    ATTRS{bmCapabilities}=="6"
    ATTRS{iad_bFirstInterface}=="01"
    ATTRS{iad_bFunctionClass}=="02"
    ATTRS{iad_bFunctionProtocol}=="01"
    ATTRS{iad_bFunctionSubClass}=="02"
    ATTRS{iad_bInterfaceCount}=="02"
    ATTRS{physical_location/dock}=="no"
    ATTRS{physical_location/horizontal_position}=="left"
    ATTRS{physical_location/lid}=="no"
    ATTRS{physical_location/panel}=="top"
    ATTRS{physical_location/vertical_position}=="upper"
    ATTRS{supports_autosuspend}=="1"

Мне кажется, я уже все перепробовал:

  • sudo chmod a+rw /dev/ttyACM0
  • sudo usermod -a -G uucp $USER
  • добавление правила udev со всеми разными конфигурациями (хотя если chown/chmod не работает, что это изменит??)
  • смена владельца на моего пользователя...
  • Я проверил процесс для IDE, чтобы убедиться, что он работает на моем пользователе и работает
  • После всех этих шагов я всегда либо перезапускал, либо перезагружал все с помощью sudo udevadm control --reload-rules && триггер sudo udevadm
  • Просмотрел множество похожих тем, ничего не понял

Я чувствую, что, должно быть, делаю здесь что-то ужасно глупое, мне непонятно, почему это не сработает, даже после того, как я сообщил об этом своему пользователю...

, 👍1


1 ответ


1

Глядя на определение платы для UNO WIFI R2, он не использует последовательный порт для загрузки. Он использует микросхему mdbg, с которой он общается по USB-протоколу, отличному от cdcacm. Тем не менее, если вы станете владельцем группы для последовательного устройства, это хорошо для связи с платой через последовательный монитор.

Похоже, что пакет платы megaavr поставляется с файлом для создания вашего udev, которые вы можете найти по адресу:

"${USER}/.arduino15/packages/arduino/hardware/megaavr/1.8.8/scripts/create_dfu_udev_rule"

Подкаталог 1.8.8 megaavr актуален на момент написания. Без сомнения изменится. У меня все еще есть 1.8.7 в моей системе.

При его запуске должно быть создано необходимое правило udev, позволяющее avrdude обращаться напрямую к USB-устройству. В частности, они добавляют это:

SUBSYSTEM=="usb", ATTR{idVendor}=="03eb", ATTR{idProduct}=="2145", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1"

Похоже, они создают правило udev и для устройства tty, хотя в этом нет строгой необходимости, учитывая то, что вы уже сделали, став членом группы последовательных устройств. По сути, вы делаете это, становясь членом группы владельцев, где они просто открывали устройство для разрешений RW для всех.

,

Это сработало! Большое спасибо за это понимание, я бы точно не понял это за разумное время самостоятельно, я просто запустил скрипт, чтобы добавить правила tty и usb, и удалил тот, который я сделал ранее. Я не проверял, работает ли добавление только правила usb, но на самом деле права на устройстве tty были в порядке (rw для группы владельцев), @nieomylnieja

не могли бы вы отправить точные команды, которые вы использовали для исправления ошибки? @nieomylnieja, @S G

Вы можете попробовать sudo "${USER}/.arduino15/packages/arduino/hardware/megaavr/1.8.8/scripts/create_dfu_udev_rule" Это может сработать. Я практически не могу сделать это для каждой версии каждого дистрибутива Linux в сочетании с каждой базовой версией и запускать из каждой командной оболочки. Если это неясно, «${USER}» будет соответствовать вашему имени пользователя. Или, скорее, это будет в bash. Версия 1.8.8 актуальна на момент этого комментария., @timemage