Não é possível gravar em um pino GPIO apesar das permissões de arquivo em / sys / class / gpio / gpio18 / value

5

Isto está em um Raspberry Pi.

Aqui está a saída do sudo ls -lL / sys / class / gpio / gpio18:

-rwxrwx--- 1 root     gpio     4096 Mar  8 10:50 active_low
-rwxrwx--- 1 root     gpio     4096 Mar  8 10:52 direction
-rwxrwx--- 1 cameron  cameron  4096 Mar  8 10:50 edge
drwxrwx--- 2 root     gpio        0 Mar  8 10:50 power
drwxrwx--- 2 root     gpio        0 Mar  8 10:50 subsystem
-rwxrwx--- 1 root     gpio     4096 Mar  8 10:50 uevent
-rwxrwx--- 1 cameron  cameron  4096 Mar  8 10:50 value

Parece que agora devo ter acesso ao valor, ótimo. No entanto:

cameron@raspberrypi~ $ echo 1 > /sys/class/gpio/gpio18/value
-bash: /sys/class/gpio/gpio18/value: Permission denied

O que está acontecendo? Se eu chmod 777 tudo, então funciona, mas eu não deveria ter que fazer isso quando eu possuo o arquivo.

    
por Cameron Ball 08.03.2014 / 12:16

4 respostas

5

Resolvi o problema adicionando cameron ao grupo gpio:

sudo usermod -aG gpio cameron
gpio export 18 out
echo 1 > /sys/class/gpio/gpio18/value

Agora tudo funciona.

    
por 09.03.2014 / 05:29
5

Eu não joguei com os pinos do GPIO dessa forma, mas com base no comentário do lgeorgets segundo e este artigo , você deve primeiro definir a direção do pin como" out ". O nó direction é de propriedade de root, portanto:

sudo sh -c 'echo out > /sys/class/gpio/gpio18/direction'

sh -c é necessário aqui para executar esse comando em um subshell raiz. Isso ocorre porque sudo echo out > direction executaria echo como root, mas o redirecionamento ( > direction ) seria feito pelo shell atual (não raiz). Você também pode fazer isso su root .

Depois disso, você poderá, com sorte, definir value como cameron .

    
por 08.03.2014 / 14:29
1

Como lgeorget menciona um comentário acima,

/sys é um pseudo sistema de arquivos fornecido pelo kernel, se o kernel requerer que o gravador seja root, então este é um requisito fixo do kernel e não pode ser modificado com os atributos e proprietários.

Isso é explicado em mais detalhes com essa resposta em questão: Como definir permissões em / sys / permanent que fornece uma solução para acessar tal arquivo usando o comando sudo, e fornece uma receita para modificar /etc/sudoers para evitar ter que digitar uma senha em cada vez.

Realmente não faria sentido renomear nenhum desses arquivos?

    
por 08.03.2014 / 12:40
0

Este arquivo é um link simbólico para algum outro local? Porque nesse caso, o arquivo original pode ter propriedade diferente do link.

Quais são as permissões do diretório (verifique ls -l um diretório acima).

Você alterou a propriedade desse arquivo? Como sys é um sistema de arquivos virtual especial que reflete o estado interno do kernel, a maioria dessas variáveis é imutável por natureza, independentemente do sistema de arquivos.

    
por 08.03.2014 / 12:23