Linux的嵌入式系统中断/硬件处理

时间:2011-02-07 09:02:03

标签: c linux embedded arm interrupt

在运行Linux 2.6.30 buildroot的AT91SAM9RL-EK ARM板上,我有以下内容。

cat /proc/interrupts
           CPU0
  1:       6475         AIC  at91_tick, rtc0, ttyS0
 10:         11         AIC  mmc0
 13:          4         AIC  atmel_spi.0
 18:      23533         AIC  tc_clkevt
 20:          0         AIC  atmel_tsadcc
 22:          0         AIC  atmel_usba_udc
 23:          0         AIC  atmel_lcdfb
 24:          0         AIC  AC97C
 40:          1        GPIO  atmel_usba_udc
 47:          0        GPIO  mmc0
 64:          6        GPIO  Right Click
 65:         10        GPIO  Left Click

右键和左键单击是我板上的按钮。现在我想修改按钮的中断处理程序(例如,单击时它们会给我一个输出)。

在哪里可以找到按钮的中断处理程序或驱动程序(或它们的源文件)?

或者我可以编写自己的驱动程序并注册它们(当我在用户空间时)按钮和方法吗?

这是董事会指南中关于PIO的一些数据

IO... Per.... Application Usage............................................ Pow. by
PB0  TXD3 USER’S PUSH BUTTON 1 PB0 as LEFT CLICK VDDIOP
PB1  RXD3 USER’S PUSH BUTTON 2 PB1 as RIGHT CLICK VDDIOP

2 个答案:

答案 0 :(得分:3)

我的电路板没有具体的答案,但我可以为您提供所需信息的一些指示。

解决问题的最简单方法是删除“中断处理程序”要求并简单地轮询GPIO行。您可以从用户空间执行此操作,只要您是root用户即可。许多开发环境提供内核模块来为您执行此操作,将结果公开为/dev/proc中的条目。

如果您要处理中断,则需要编写Linux设备驱动程序。从这里开始的最佳位置是可以在http://lwn.net/Kernel/LDD3/下载的Linux设备驱动程序书

GPIO驱动程序非常简单,主要包括对register_irq()和用户空间接口代码的调用。用户空间接口代码将比其余代码大得多,也会让您头疼。

答案 1 :(得分:1)

我对特定的board和buildroot没有任何经验,但是在内核树中的Documentation dir中查看gpio.txt可能会很有趣。关于如何使用sysfs从用户空间使用GPIO有一些解释。