当GPIO更改状态时,sysfs如何更新?

时间:2013-11-02 17:37:30

标签: linux-kernel interrupt gpio sysfs

假设gpio X可以作为输入引脚在sysfs中导出,在这之后,将在/ sys / class / gpio /中创建一个名为gpioX的目录。 gpioX /包含一些文件,例如“value”,表示gpio X的当前状态(高或低)。

当施加到引脚X的信号改变其状态(例如从低到高)时会发生什么(在内核空间中)?

我的意思是,在转换之前gpioX / value包含“low”,但之后它将包含“high”值。操作系统如何更新此文件?

我认为需要一个中断机制。它是否使用中断机制来更新sysfs?

1 个答案:

答案 0 :(得分:5)

  

操作系统如何更新此文件?我认为需要一个中断机制。

除非支持轮询(man poll)或备用异步通知,否则它不需要中断机制。至少对于大多数版本, / sys / class / gpio / 仅在有人读取文件时读取GPIO级别。

sysfs debugfs configfs procfs 等是虚拟文件系统。当您访问该文件时,Linux内核中的代码将运行以提供该值。 sysfs 只提供类似接口的文件;这并不意味着支持具有实际状态。状态是GPIO级别,可以随时读取。

gpio_value_show()似乎是当前的实施。你用中断描述的是可能的。可以通过sysfs_set_active_low()函数或 sysfs 文件 / sys / class / gpio / gpioN / edge 来完成。如果GPIO不支持中断,写入文件可能会返回错误。有关更多信息,请参阅gpio.txt(特别是对于您的特定Linux版本)。