Linux设备驱动程序 - 如何在导出GPIO时接收添加设备的通知?

时间:2012-04-12 03:32:24

标签: linux-kernel driver

这是我第一篇关于stackoverflow的帖子,希望这个问题是合适的。

我正在为虚拟GPIO芯片编写Linux设备驱动程序,该芯片配置了一些输入和输出引脚,其中一些是物理引脚的别名,另一些是虚拟引脚。对于虚拟引脚,我有一个用户空间应用程序,它打算通过芯片设备的后门和导出的引脚提供另一半虚拟化。例如,芯片将GPIO 224配置为可中断输入,目的是阻止来自用户空间的呼叫,例如cat /sys/class/gpio/gpiochip224/Virtual Input/value。为此,我的方法是将一个特殊的文件属性添加到名为“virtual”的“虚拟输入”(例如)。对“cat”的调用将调用“gpio_chip.get”回调并等待队列。我的用户空间应用程序稍后将决定值何时更改,并将更新的值写入“... / Virtual Input / virtual”,它会在内部更新该值并取消阻止等待。

我遇到的问题是将设备属性添加到导出的引脚。从命令行使用echo "224" > /sys/class/gpio/export导出引脚,然后调用我的“gpio_chip.request”回调。这是我发现可能以同步方式添加属性的唯一地方。但是,查看GPIO类驱动程序时,我看到“请求”回调发生了调用,然后调用“gpio_export”,然后调用“device_add”,将设备(即引脚)添加到系统。换句话说,设备尚未存在于请求处理程序的上下文中,我无法添加属性。

我注意到似乎没有与导出的pin设备(也没有芯片)关联的总线,并且正在尝试创建自己的总线,以便通过gpio_export调用device_add来接收通知,但是没有运气。

任何指出我正确方向的想法都会受到赞赏。

0 个答案:

没有答案