我正在编写一个Linux内核驱动程序,并且遇到了一个奇怪的问题,这可能源于我缺乏理解。我正在编写的程序是一个内核模块,它试图通过GPIO进行一些通信。通信协议很简单(根据我传递的内容切换为高或低)。
状态现有的驱动程序正在使用我感兴趣的GPIO。它还使用它进行通信,但只能读取而不能写入。我的司机只写作。我们都使用的通信协议是相同的。在现有驱动程序自行设置之后,我的模块调用GPIO_REQUEST(我无法访问其他驱动程序的源代码)。
任何通过GPIO_REQUEST获取gpio的尝试都会导致驱动程序自行重置。我已经在振荡器上证实了这种行为。
问题两个驱动程序如何共享GPIO?我假设我的GPIO_REQUEST调用以某种方式从另一个驱动程序中取消了对GPIO的控制,并且调用GPIO_FREE并不能解决这种情况(导致重置)。
理想情况下,我希望“借”" gpio,设置输出方向,写入我的数据,然后将其返回给另一个驱动程序。
注意:如果需要,愿意修改内核源代码。