【问题标题】:How do can I find out which Linux driver is hogging my GPIO?如何找出占用我的 GPIO 的 Linux 驱动程序?
【发布时间】:2013-04-08 15:55:23
【问题描述】:

我的板上有一个作为 GPIO 复用的焊盘。当我尝试通过 /sys/class/gpio/export 导出它时,我得到了

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

我的猜测是其他司机在我得到这个机会之前就要求使用这个垫子。我怎样才能知道它在保留什么?

【问题讨论】:

    标签: linux-device-driver gpio


    【解决方案1】:

    您可以使用“lsof”命令列出打开的文件。事实上,gpio 文件是常规文件。 (例如 /sys/class/gpio/gpio242/value)。
    此外,您应该确保将正确的内核模块(使用 insmod 或 modprobe)加载到内存中。

    【讨论】:

    • 这将不起作用,因为 sysfs 节点还不存在。回显要导出的 GPIO 编号应该会创建节点,但不会。
    • 如果您加载了正确的内核模块,您可以在 /sys/devices/virtual/gpio/ 目录中看到所有可用的 gpio。你的目录内容是什么?您可以看到标签文件以跟随其在电路板原理图中的真实位置。
    【解决方案2】:

    我们最终使用了另一个 GPIO 引脚。 i.mx6 有 7 个 GPIO 控制器,每个控制器有 32 个引脚,一些控制器只是在看似无处提供 I/O 错误。

    【讨论】:

      【解决方案3】:

      在边界设备内核上,也许还有其他内核上,您可以使用cat /sys/kernel/debug/gpio 来获取映射的 gpio 的列表、它们的状态以及分配时给出的名称。您可以 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    
      

      '

      【讨论】:

      • 谢谢,这看起来非常有用。我想知道它是否存在于 3 年前。
      • 可能。我搜索了同样的问题,但没有找到答案,所以我只是做了一个find /sys -name gpio 并找到了这个,这让我知道我请求了错误的 GPIO。
      【解决方案4】:

      如果您尝试使用cat /sys/kernel/debug/gpio 但它不起作用,请先尝试:

      mount -t debugfs debugfs /sys/kernel/debug
      

      然后使用前面提到的cat 命令

      【讨论】:

        猜你喜欢
        • 2017-01-30
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 2018-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多