假设gpio X可以作为输入引脚在sysfs中导出,在这之后,将在/ sys / class / gpio /中创建一个名为gpioX的目录。 gpioX /包含一些文件,例如“value”,表示gpio X的当前状态(高或低)。
当施加到引脚X的信号改变其状态(例如从低到高)时会发生什么(在内核空间中)?
我的意思是,在转换之前gpioX / value包含“low”,但之后它将包含“high”值。操作系统如何更新此文件?
我认为需要一个中断机制。它是否使用中断机制来更新sysfs?
答案 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版本)。