Não é possível executar o programa sem privilégios de root, independentemente do grupo ou permissões

1

avrdude é uma ferramenta simples que permite o download de um programa para um microcontrolador de destino. Para completar, o comando que estou tentando emitir é:

avrdude -p atmega328p -c usbtiny -P usb -v -U -flash:w:program.hex

Toda vez que eu emito este comando, estou sujeito ao erro 'Operation not permitted" e sou solicitado a sudo avrdude .. para que ele funcione. Eu achei estranho que era necessário fazer isso, então eu mergulhei no problema um pouco mais.

O programador que estou usando se monta em /dev/ttyUSB0 e faz parte do grupo dialout . Além disso, este dispositivo tem permissões para que qualquer usuário no grupo dialout possa gravar no dispositivo, que é o que o comando acima faz.

crw-rw----  1 root dialout   188,   0 Jul 15 02:04 ttyUSB0

Apesar de root possuir o dispositivo, simplesmente adicionando-me ao grupo de discagem parecia ser suficiente para permitir-me usar o dispositivo. Depois de fazer isso, ainda foi atendido com o erro "Operation not permitted" .

Eu pensei, então, que talvez o programa avrdude em si fosse o problema. Depois de encontrar o binário em /usr/bin , ficou claro que isso não era um problema, dadas as permissões do arquivo.

-rwxr-xr-x 1 root root 413888 Oct 21 2013 avrdude

tl; dr Faço parte do grupo apropriado e os arquivos têm permissões que devem permitir que eu os use, mas ainda assim não consigo, sem antes me elevar.

    
por sherrellbc 17.07.2015 / 06:46

1 resposta

2

O controle de baixo nível dos dispositivos USB é feito via /dev/bus/usb e você precisa definir as permissões corretas no dispositivo. A maneira de fazer isso é com uma regra do udev:

Crie um arquivo (como /etc/udev/rules.d/52_local-usbtiny.rules ) com:

SUBSYSTEM=="usb", ATTR{idVendor}=="1781", ATTR{idProduct}=="0c9f", MODE="664", GROUP="plugdev"

Isso define o grupo para plugdev ; você poderia usar USER="your-user-name" para definir o proprietário.

Em seguida, atualize o udev (por exemplo, service udev force-reload ou systemctl reload udev ). Na próxima vez que você desconectar / reconectar o programador, as novas permissões deverão entrar em vigor.

    
por 17.07.2015 / 08:05