
Ich verwende Linux auf meiner SAMA5D27-Embedded-Platine. Ich verwende außerdem libgpiod, um die GPIO-Konfigurationen der Platine zu manipulieren. Zunächst kann ich alle Zeilen der angegebenen GPIO-Chips, ihre Namen, Verbraucher, Richtung und ihren aktiven Status mit einem gpioinfo
Befehl auflisten, und das hier zeigt mir:
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
...
Für meine Arbeit möchte ich "PA10" für den persönlichen Gebrauch reservieren. Dieser Pin bezieht sich auf eine rote LED. Aber welcher Befehl auch immer verwendet wird, um diesen GPIO-Pin zu manipulieren, er zeigt mir:
error setting the GPIO line values: Device or resource busy
Ich denke, das liegt daran, dass es als angezeigt wird [used]
.
Gibt es eine Möglichkeit, es unbrauchbar zu machen? Es freizugeben, sodass ich es manipulieren kann?
Antwort1
Die used
Markierung und Device or resource busy
bedeuten, dass dieser E/A-Pin zur ausschließlichen Verwendung durch einen Treiber beansprucht wurde.
Um herauszufinden, wofür der Pin verwendet werden könnte, haben Sie mehrere Möglichkeiten:
- Check
/sys/class/gpio/gpio*/
(mittlerweile veraltet, aber oft noch verwendet) - Prüfen
/sys/kernel/debug/gpio
(sofern vorhandendebugfs
und montiert) - Überprüfen Sie Ihren aktiven Gerätebaum, um zu sehen, ob der Pin einem Gerät oder Treiber zugeordnet ist.
Es ist red
hier benannt und Sie haben erwähnt, dass es eine LED ist. Es könnte also unter angezeigt werden /sys/class/leds/*
, möglicherweise mit einem Standardauslöser? Wenn ja, können Sie es durch Ändern des Auslösers einem anderen Zweck zuführen oder die Registrierung als LED aufheben, wenn Sie den Pin direkter bzw. mit libgpiod manuell steuern möchten. Durch Bearbeiten des Gerätebaums können Sie die Änderung wahrscheinlich dauerhaft machen.
Antwort2
„Verwendet“ bedeutet, dass dieser Pin mit einem Peripheriegerät oder einem Bus verbunden ist. Sie können anhand der DTS-Datei des Kernel-Gerätebaums und des Platinenschemas prüfen, welcher Pin diesem Pin zugeordnet ist. Wenn der Pin beispielsweise mit dem I2C-Bus verbunden ist, müssen Sie den I2C-Befehl anstelle des GPIO-Befehls verwenden.