Blob Blame History Raw
On the avrdude Fedora package
=============================

This file contains remarks for users of the avrdude Fedora package.


Programmer Device Permission Setup
==================================

When you run `avrdude`, the avrdude process must be allowed to access
the device special file somewhere in `/dev/` which corresponds to the
programmer to be used.

`avrdude` support many different programmer types (run `avrdude -c
list` to see a list of them).

Many of these programmer types are USB devices which appear as a
device `/dev/bus/usb/<NNN>/<MMM>` with `<NNN>` and `<MMM>` being 3
digit decimal numbers padded with `0`.  Those devices can be easily
matched in a udev rule looking for the USB idVendor and idProduct, and
be made writable for the local user (`TAG+="uaccess"`).

See `/usr/lib/udev/rules.d/70-avrdude_usbprog.rules` for how that
works.

Unfortunately, some programmers present as generic USB to serial
converters (device file name `/dev/ttyUSB<N>`) or as generic USB
AT-command devices (device file name `/dev/ttyACM<N>`).

While it is technically possible to make all `/dev/ttyUSB<N>` and/or
`/dev/ttyACM<N>` devices writable for whichever Linux user happens to
be the local user, some of those devices can be devices for which it
is better if they are not being writable by anyone.

Therefore, the avrdude Fedora does *not* make all `/dev/ttyUSB<N>`
and/or `/dev/ttyACM<N>` writable for the local user just by install
the package.

If you *do* want to make these devices writable for any local user,
you can configure your system yourself by dropping a udev rules file
into `/etc/udev/rules.d/`.  But while you are at it, you can as well
examine your programmer close (`lsusb` and `lsusb -v` can be helpful
here) and narrow down the udev rule matching to match only your
programmer, not each and every `ttyUSB<N>` or `ttyACM<N>` device.

``` /etc/udev/rules.d/99-my-avrdude-programmers.rules
ACTION!="add|change", GOTO="my_avrdude_programmers_end"

# Recommended: /dev/ttyUSB<N> devices matching specific idVendor/idProduct tuple
SUBSYSTEM=="usb-serial", ATTR{idVendor}=="0123", ATTR{idProduct}=="4567", TAG+="uaccess"

# Recommended: /dev/ttyACM<N> devices matching specific idVendor/idProduct tuple
SUBSYSTEM=="usb", DRIVERS=="cdc_acm", ATTR{idVendor}=="0123", ATTR{idProduct}=="4567", TAG+="uaccess"

# Discouraged: *ALL* /dev/ttyUSB<N> devices
SUBSYSTEM=="usb-serial", TAG+="uaccess"

# Discouraged: *ALL* /dev/ttyACM<N> devices
SUBSYSTEM=="usb", DRIVERS=="cdc_acm", TAG+="uaccess"

LABEL="my_avrdude_programmers_end"
```

Unfortunately, the existing avrdude Fedora package udev rules do not
support setting up permissions for non-local users, like e.g. users
logged in via ssh. If you need such a setup, you will need also to
write your own udev rules file for `/etc/udev/rules.d/`, and set
`OWNER=`, `GROUP=`, `MODE=`, or change the device ACL with something
like `RUN+="/usr/bin/setfacl -m g:avrdude-programmers:rw
'$env{DEVNAME}'"`.