[BUG] Erro ao utilizar a interface GPIO

Estou fazendo os primeiros testes com meu Labrador, e encontrei o erro ao dar o comando:

$ gpio readall

wiringPiSetup: mmap (GPIO) failed: Operation not permitted

Como posso fazer para habilitar o acesso ao GPIO?

Obs: Tive esse mesmo erro ao tentar utilizar qualquer comando direcionado ao GPIO.

1 Curtida

Oi Asafe, então, analisamos aqui e realmente encontramos um bug de conflito entre a biblioteca wiringK9 e o driver de temperatura da CPU que está instalado por padrão no sistema. :pensive:
Já estamos vendo se conseguimos corrigir isso logo, por enquanto deixo aqui duas possibilidades para você corrigir o problema e utilizar o wiringK9.

Instalar uma versão anterior do sistema :

Para isto, basta fazer o download da versão anterior neste link (já chequei e está funcionando o wiringK9 nesse). E seguir o tutorial de troca de sistemas que está na wiki Instalando um sistema.

Trocar o Kernel do Linux

Pra isso você pode baixar somente os arquivos do kernel e seguir esse tutorial ótimo escrito pelo @thalyson:

  • Criar diretório e montar partição
sudo mkdir /media/caninos/BOOT
sudo mount /dev/mmcblk2p1 /media/caninos/BOOT
  • Copiar “kernel.dtb” e “uImage” para a raíz da partição BOOT
sudo cp -r /src/kernel.dtb /media/caninos/BOOT
sudo cp -r /src/uImage /media/caninos/BOOT
  • Copiar “lib/modules” para “lib/modules” da partição SYSTEM:
sudo cp -r /src/lib/modules /lib/
  • Criar arquivo e adicionar linha “blacklist labrador_s500_thermal” em “/etc/modprobe.d/blacklist.conf”
sudo su
echo "blacklist labrador_s500_thermal" >> /etc/modprobe.d/blacklist.conf"
  • Desmontar partição e excluir diretório
sudo sync
sudo umount /media/caninos/BOOT
sudo rm -r /media/caninos/BOOT/
  • Reiniciar a Labrador
sudo reboot

Obs: “src” é o diretório fonte onde está o kernel a ser instalado

Espero que isso resolva seu problema e quando tiver mais atualizações da correção do wiringK9 aviso aqui! :wink:

3 Curtidas

Olá Augusto, muito obrigado pela resposta.

Fui executar os comando que você disponibilizou e encontrei alguns erros:

1 - Não existia o diretório ‘/media/caninos/BOOT’. Mas isso não foi problema, acabei criando e colando os arquivos lá.

2 - Não existe a pasta ‘lib/modules’ no arquivo do link que foi disponibilizado, só existem os arquivos:
asf

Consequentemente por não haver os arquivos da ‘lib’, não foi resolvido o problema do GPIO

Olá Asafe, está certo, o diretório não é criado por padrão, já adicionei os comandos para criar e depois apagar o diretório no tutorial.

A pasta /lib/modules não estava mesmo no link, foi um erro de compactação, já corrigi agora para o link correto. Aqui está o arquivo certo.

1 Curtida

Maravilha Augusto, funcionou aqui. Muito obrigado.

Consegui fazer alguns testes, e consegui fazer funcionar tanto por script quanto por shell.

Só encontrei um problema, que foi o comando “gpio readall”.

Ele retorna:

root@debian-armhf:/home/caninos/Desktop# gpio readall
Oops - unable to determine board type... model: 5

Sabe se posso fazer algo por aqui para resolver esse problema?

Olá, @asafedainez. O WiringK9 foi atualizado há pouco tempo e o comando gpio readall agora funciona. Faça os seguintes passos para atualizá-lo:

cd ~/wiringK9
sudo ./build uninstall
sudo ./build clean
cd ..
sudo rm -r ~/wiringK9
git clone https://github.com/caninos-loucos/wiringK9.git
cd wiringK9
chmod +x ./build
sudo ./build

Agora o comando deve funcionar :wink:

Olá a todos!

Estou apresentando o mesmo erro na labrador 32bits:

caninos@debian-armhf:~$ uname -a
Linux debian-armhf 4.19.98 #1 SMP PREEMPT Fri Jan 14 16:18:01 -03 2022 armv7l GNU/Linux    

caninos@debian-armhf:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

Gostaria de saber se o procedimento ainda é o mesmo para essa versão ou se o procedimento é outro. Obrigado desde já!

Bom dia pessoal, só expandindo um pouco o comentário do @vitorbortoloti, nós conseguimos utilizar o GPIO através da interface /sys/class (read/write), mas não com a WiringPi.

Eu também verifiquei que os links para troca de kernel estão offline, o que acontece é que que o diretório de downloads mudou, agora está em https://downloads.caninosloucos.org/. De todo modo, acho que aquela versão compilada não está mais disponível (teria que recompilar do github).

1 Curtida

Pelo jeito a WiringPi/WiringK9 está deprecated para as versões mais novas do kernel. A solução foi usar a interface chardev, com a api em c libgipod.

Deixei meu relato mais completo no tópico de casos de uso da GPIO, para quem se interessar.

Estou tentando utilizar o GPIO, consigo escrever no LED verde e azul GPIO44 e GPIO63 por meio da interface de sistema de aquivos /sys/class/gpio. Porém os demais pinos não funcionam. O valor lido, por exemplo: /sys/class/gpio/gpio21/value não condiz com o estado do pino físico.

Kernel 4.19.98 Labrador base board-M V2.1 e Labrador core v2.2

Atualização: Consegui utilizar o GPIO por meio do sysfs após instalar a libgpiod ¯\_ (ツ)_/¯ porém o gpiod não funciona, somente a interface sysfs.

Atualização 2: gpiomon em qualquer gpio trava o SO…