gpioset:設定 GPIO 線值時發生錯誤:設備或資源繁忙

gpioset:設定 GPIO 線值時發生錯誤:設備或資源繁忙

我在 SAMA5D27 嵌入式板上使用 Linux。我還使用 libgpiod 來操作主機板的 GPIO 配置。首先,我可以使用指令列出指定 gpiochip 的所有行、它們的名稱、消費者、方向、活動狀態gpioinfo,這向我顯示:

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 
...

對於我的工作,我想為個人保留“PA10”;,該引腳指的是紅色LED。但無論使用什麼指令來操作這個 GPIO 引腳,它都會向我展示:

error setting the GPIO line values: Device or resource busy

我認為這是因為它顯示為[used].

有辦法讓它不被使用嗎?讓它自由以便我可以操縱它?

答案1

標記usedDevice or resource busy表示該 I/O 引腳已被驅動程式宣告為獨佔使用。

有幾種方法可以深入了解可能使用該引腳的內容:

  • 檢查/sys/class/gpio/gpio*/(現已棄用,但仍經常使用)
  • 檢查/sys/kernel/debug/gpio(如果有debugfs可用且已安裝)
  • 檢查活動設備樹,查看引腳是否與裝置或驅動程式關聯

red在這裡命名,並且您提到它是一個 LED,因此它可以在 下暴露/sys/class/leds/*,可能帶有預設觸發器?如果是這樣,您可以透過修改觸發器來重新調整它的用途,或者如果您想更直接/使用libgpiod 手動控制引腳,則可以將其取消註冊為LED...編輯裝置樹可能是使變更永久化的方法。

答案2

“使用”表示該引腳連接到外圍設備或匯流排。您可以從核心設備樹 dts 檔案和電路板原理圖中查看哪一個對應到該引腳。例如,如果引腳連接到 i2c 總線,則應使用 i2c 命令而不是 gpio cmd。

相關內容