gpioset: error al configurar los valores de la línea GPIO: dispositivo o recurso ocupado

gpioset: error al configurar los valores de la línea GPIO: dispositivo o recurso ocupado

Estoy usando Linux en mi placa integrada SAMA5D27. También estoy usando libgpiod para manipular las configuraciones GPIO de la placa. Primero, puedo enumerar todas las líneas de gpiochips especificados, sus nombres, consumidores, dirección, estado activo con gpioinfocomando, y esto me muestra:

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 mi trabajo, quiero reservar "PA10" para nosotros personalmente; este pin se refiere a un LED rojo. Pero cualquier comando usado para manipular este pin GPIO me muestra:

error setting the GPIO line values: Device or resource busy

Creo que eso se debe a que se muestra como [used].

¿Hay alguna manera de dejarlo sin usar? ¿Para hacerlo libre para poder manipularlo?

Respuesta1

El usedmarcador y Device or resource busysignifica que este pin de E/S ha sido reclamado para uso exclusivo por parte de un controlador.

Hay algunas formas de profundizar en lo que podría estar usando el pin:

  • Verificar /sys/class/gpio/gpio*/(ahora obsoleto, pero todavía se usa con frecuencia)
  • Consultar /sys/kernel/debug/gpio(si lo tienes debugfsdisponible y montado)
  • Revise su árbol de dispositivos activos para ver si el pin está asociado con un dispositivo o controlador

Se nombra redaquí y mencionaste que es un LED, por lo que podría exponerse en /sys/class/leds/*, ¿posiblemente con un disparador predeterminado? Si es así, puede reutilizarlo modificando el disparador o cancelar su registro como LED si desea controlar manualmente el pin de manera más directa/con libgpiod... editar el árbol de dispositivos probablemente sería la forma de hacer que el cambio sea permanente. .

Respuesta2

"Usado" significa que este pin está conectado a un dispositivo periférico o a un bus. Puede consultar el archivo dts del árbol de dispositivos del kernel y el esquema de la placa para ver cuál está asignado a este pin. Por ejemplo, si el pin está conectado al bus i2c, deberá utilizar el comando i2c en lugar de gpio cmd.

información relacionada