【发布时间】:2015-09-22 13:07:24
【问题描述】:
我正在编写一个驱动程序来控制 GPIO 引脚。我已经确定了 JP4 连接器并在 gpio91 上添加了一个 LED (JP4.06 => /sys/class/gpio/gpio91)。在阅读了许多教程后,我编写了一个简单的内核模块。该模块接收来自用户空间的输入,并根据输入设置 gpio,如gpio_set_value(91,true)。在调用gpio_set_value 之前,我正在调用另一个函数,即gpio_direction_output。因此led是发光的。另一方面,当我从用户空间获取其他命令以获取 PIN 的状态时(为此,我依赖 gpio_get_value(91) 并为此设置输入方向),这里我没有得到正确的值。
我是否错过了获得所需价值的任何步骤?我应该如何尝试这样做?
【问题讨论】:
-
首先要检查此类问题: 1. 是否为您的模块 (GPIO) 启用了时钟? 2. 您使用的引脚是否复用到 GPIO(而不是其他模块)?首先检查您的设备树文件是否有引脚多路复用器。
-
另外,请务必调用
gpio_request()(在调用任何其他 GPIO 特定函数之前)并检查dmesg输出:可能其他人已经在使用您的 GPIO。gpio_request()会帮你调试。 -
另外,请向我们提供您正在使用的内核版本,以及它是否为您的设备使用板文件或设备树。也可以链接到内核的 git 存储库。
-
@SamProtsenko 我不确定如何检查时钟是否启用,但我们的内核模块很高兴插入。即使我不确定我的引脚是否被复用但是当我设置引脚时LED 亮起。
-
@SamProtsenko 我正在使用这个内核版本:3.10.17-1.0.1-wandboard+ga6e7fc5 这个图像是 core-image-minimal 版本。
标签: c linux-kernel arm gpio