web-dev-qa-db-ja.com

どのLinuxドライバーがGPIOを占有しているのかを知るにはどうすればよいですか?

ボード上にGPIOとしてマルチプレックスされたパッドがあります。/sys/class/gpio/exportを介してエクスポートしようとすると、次のようになります。

-sh: echo: write error: Device or resource busy

私の推測では、他のドライバーがそのチャンスを得る前にこのパッドを要求しています。何が予約されているのかを知るにはどうすればよいですか?

24
Atilla Filiz

Boundary Devicesカーネル、およびおそらく他のカーネルでは、cat /sys/kernel/debug/gpioを使用して、マップされたgpios、それらの状態、および割り当て時に指定された名前のリストを取得できます。名前のカーネルソースをgrepして、どのモジュールがそれを取得したかを調べることができます。

root@nitrogen6x:/opt# cat /sys/kernel/debug/gpio 
GPIOs 0-31, platform/209c000.gpio, 209c000.gpio:
 gpio-2   (flexcan-trx-stby    ) out lo    
 gpio-17  (DISP_SCL            ) out lo    

GPIOs 32-63, platform/20a0000.gpio, 20a0000.gpio:
 gpio-33  (sysfs               ) out lo    
 gpio-35  (sysfs               ) in  hi    
 gpio-36  (sysfs               ) in  hi    
 gpio-37  (DISP_SDI            ) out lo    
 gpio-38  (219c000.usdhc cd    ) in  hi    

GPIOs 64-95, platform/20a4000.gpio, 20a4000.gpio:
 gpio-83  (spi_imx             ) out lo    
 gpio-86  (usb_otg_vbus        ) out lo    

GPIOs 96-127, platform/20a8000.gpio, 20a8000.gpio:
 gpio-101 (sysfs               ) in  hi    
 gpio-116 (rst-gpios           ) out lo    

GPIOs 128-159, platform/20ac000.gpio, 20ac000.gpio:

GPIOs 160-191, platform/20b0000.gpio, 20b0000.gpio:
 gpio-175 (wlan-en             ) out lo    
 gpio-176 (bt_rfkill_reset     ) out lo    

GPIOs 192-223, platform/20b4000.gpio, 20b4000.gpio:
 gpio-192 (2198000.usdhc cd    ) in  lo    
 gpio-204 (ehci_reset_gpio     ) out lo    
 gpio-205 (sysfs               ) in  lo    

'

24
David Williams

cat /sys/kernel/debug/gpioを使おうとしても機能しない場合は、最初に次のことを試してください。

mount -t debugfs debugfs /sys/kernel/debug

次に、前述のcatコマンドを使用します

4
AleFachini

最終的に別のGPIOピンを使用しました。 i.mx6にはそ​​れぞれ32ピンの7つのGPIOコントローラーがあり、一部のコントローラーは、どこからともなくI/Oエラーを出していました。

1
Atilla Filiz

'lsof'コマンドを使用して、開いているファイルを一覧表示できます。 gpioファイルが通常のファイルであるという事実によると。 (例:/ sys/class/gpio/gpio242/value)。
また、適切なカーネルモジュール(insmodまたはmodprobeを使用)をメモリにロードする必要があります。

1
paykoob