如何在没有忙循环的情况下通过 Linux 上的 GPIO 获取边缘事件?

问题描述 投票:0回答:1

我正在使用一个带有嵌入式 Linux(内核 2.6.31)的系统。

内部是一颗AT91SAM9G20芯片,部分引脚转发到外部。

现在我想将它们用作 GPIO 输入。

我阅读了关于通过文件系统使用 GPIO 的 gpio.txt 文档,直到这里它都运行良好。我将一些开关连接到 gpio 引脚,我可以在

/sys/class/gpio/gpioX/value
中看到结果。但现在我想对变化做出反应,而不用忙着等待循环。 (即回声“按下 Switch1”)。

我想我在这里需要中断,但如果不编写自己的内核驱动程序,我无法找到如何使用它们。我对 Linux 和 C 比较陌生(我通常用 Java 编程),所以我也想通过 sysfs 处理中断。但我的问题是,在我的 GPIO 目录中没有“edge”文件(我猜是因为这是从内核版本 2.6.33+ 开始的)。是对的吗?我在那里有一个

uevent
文件,而不是“边缘”,
gpio.txt
中没有描述。

在 gpio.txt 文档中提到了一个标准内核驱动程序:“gpio_keys”。可以用它来解决我的问题吗?

我想使用这个驱动程序比允许用户空间程序操纵内核任务要好。 我找到了很多用于编写自己的驱动程序的代码片段,但我什至无法找出要包含的 600 个

gpio.h
文件中的哪些,以及如何引用该库(交叉编译器无法找到 gpio. h 文件)。

新手提问,希望大家多多指教

提前致谢

linux gpio
1个回答
0
投票

有关如何执行此操作的示例,请参见this。基本上,您缺少的是

select
poll
系统调用的使用。

© www.soinside.com 2019 - 2024. All rights reserved.