Как я могу узнать, какой драйвер Linux забивает мой GPIO?

У меня есть пэд, который множится как GPIO на моей плате. Когда я пытаюсь экспортировать его через /sys/class/gpio/export, я получаю

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

Мое предположение - это какой-то другой драйвер, запрашивающий этот пэд, прежде чем я получу этот шанс. Как я могу узнать, что его резервирует?

Ответы

Ответ 1

В ядре Boundary Devices и, возможно, других, вы можете использовать cat /sys/kernel/debug/gpio для получения списка отображаемых gpios, их состояний и имени, заданного при его назначении. Вы можете grep источник ядра для имени и узнать, какой модуль его схватил.

[email protected]:/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    

Ответ 2

В итоге мы использовали другой вывод GPIO. i.mx6 имеет 7 контроллеров GPIO с 32 выводами каждый, а некоторые коллаймеры просто выдавали ошибки ввода-вывода из ниоткуда.

Ответ 3

Вы можете использовать команду lsof для отображения открытых файлов. в соответствии с тем, что файлы gpio являются обычными файлами. (например,/sys/class/gpio/gpio242/value).
Также вы должны быть уверены, что загрузите нужные модули ядра (с insmod или modprobe) в память.