- 论坛徽章:
- 0
|
各位大神好,我在一块rk3399的板子上跑了官方的GPIO的中断使用的例子(http://wiki.t-firefly.com/index.php/Firefly-RK3399/GPIO),并且能在内核log看到中断响应的输出,
但我不明白如何将这种中断发送给应用程序,让应用程序感知。
目前我在网上了解的情况,说“驱动使用内核提供的GPIOLIB;用户程序可通过sysfs来读写最方便。如果用户程序需要以事件形式读取gpio,那么内核有个gpiokey驱动将gpio转为input事件,通过/dev/event来读取。”,还有说使用内核空间和用户空间通信的,我实在是看不明白,希望诸位不吝赐教,最好能给个示例的代码。
例子中断注册代码如下:
- static int firefly_gpio_probe(struct platform_device *pdev)
- {
- int ret;
- int gpio;
- enum of_gpio_flags flag;
- struct firefly_gpio_info *gpio_info;
- struct device_node *firefly_gpio_node = pdev->dev.of_node;
-
- ......
- gpio_info->firefly_irq_gpio = gpio;
- gpio_info->firefly_irq_mode = flag;
- gpio_info->firefly_irq = gpio_to_irq(gpio_info->firefly_irq_gpio);
- if (gpio_info->firefly_irq) {
- if (gpio_request(gpio, "firefly-irq-gpio")) {
- printk("gpio %d request failed!\n", gpio);
- gpio_free(gpio);
- return IRQ_NONE;
- }
-
- ret = request_irq(gpio_info->firefly_irq, firefly_gpio_irq,
- flag, "firefly-gpio", gpio_info);
- if (ret != 0)
- free_irq(gpio_info->firefly_irq, gpio_info);
- dev_err(&pdev->dev, "Failed to request IRQ: %d\n", ret);
- }
- return 0;
- }
- static irqreturn_t firefly_gpio_irq(int irq, void *dev_id) //中断函数
- {
- printk("Enter firefly gpio irq test program!\n");
- return IRQ_HANDLED;
- }
复制代码
|
|