gpioset: erro ao definir os valores da linha GPIO: dispositivo ou recurso ocupado

gpioset: erro ao definir os valores da linha GPIO: dispositivo ou recurso ocupado

Estou usando Linux em minha placa embarcada SAMA5D27. Também estou usando o libgpiod para manipular as configurações GPIO da placa. Primeiro, posso listar todas as linhas dos gpiochips especificados, seus nomes, consumidores, direção, estado ativo com gpioinfocomando, e isso me mostra:

gpiochip0 - 128 lines:
        line   0:        "PA0"       unused   input  active-high 
        line   1:        "PA1"       unused   input  active-high 
        line   2:        "PA2"       unused   input  active-high 
        line   3:        "PA3"       unused   input  active-high 
        line   4:        "PA4"       unused   input  active-high 
        line   5:        "PA5"       unused   input  active-high 
        line   6:        "PA6"       unused   input  active-high 
        line   7:        "PA7"       unused   input  active-high 
        line   8:        "PA8"       unused   input  active-high 
        line   9:        "PA9"       unused   input  active-high 
        line  10:       "PA10"        "red"  output  active-high [used]
        line  11:       "PA11"       unused   input  active-high 
...

Para o meu trabalho, quero reservar "PA10" para nós pessoais; este pino refere-se a um LED vermelho. Mas qualquer que seja o comando usado para manipular este pino GPIO, ele me mostra:

error setting the GPIO line values: Device or resource busy

Acho que é porque é mostrado como [used].

Existe uma maneira de torná-lo não utilizado? Para liberá-lo para que eu possa manipulá-lo?

Responder1

O usedmarcador e Device or resource busysignifica que este pino de E/S foi reivindicado para uso exclusivo por um driver.

Existem algumas maneiras de descobrir o que pode estar usando o pin:

  • Check /sys/class/gpio/gpio*/(agora obsoleto, mas ainda usado com frequência)
  • Verifique /sys/kernel/debug/gpio(se tiver debugfsdisponível e montado)
  • Revise sua árvore de dispositivos ativos para ver se o PIN está associado a um dispositivo ou driver

É nomeado redaqui e você mencionou que é um LED, então pode ser exposto em /sys/class/leds/*, possivelmente com um gatilho padrão? Nesse caso, você pode reajustá-lo modificando o gatilho ou cancelar o registro como um LED se quiser controlar manualmente o pino de forma mais direta/com libgpiod... editar a árvore de dispositivos provavelmente seria a maneira de tornar a mudança permanente .

Responder2

"Usado" significa que este pino está conectado a um dispositivo periférico ou barramento. Você pode verificar no arquivo dts da árvore de dispositivos do kernel e no esquema da placa para ver qual deles está mapeado para este pino. Por exemplo, se o pino estiver conectado ao barramento i2c, você deve usar o comando i2c em vez do gpio cmd.

informação relacionada