5

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

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

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

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

4

1 回答 1

7

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

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

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

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

于 2013-11-02T21:49:26.670 回答