在我的 AT91SAM9RL-EK ARM 板上,运行 Linux 2.6.30 buildroot,我有以下内容。
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
最佳答案
我没有针对您的董事会的具体答案,但我可以根据您需要的信息为您提供一些指导。
解决您问题的最简单方法是放弃“中断处理程序”要求并简单地轮询 GPIO 线。只要您是根用户,就可以从用户空间执行此操作。许多开发环境都提供一个内核模块来为您执行此操作,将结果公开为 /dev
或 /proc
中的条目。
如果您要处理中断,则需要编写 Linux 设备驱动程序。最好的起点是很棒的 Linux 设备驱动程序书,可在 http://lwn.net/Kernel/LDD3/ 下载。
GPIO 驱动程序非常简单,主要由调用 register_irq()
和您的用户空间接口(interface)代码组成。用户空间界面代码将比其余代码大得多,也会让你最头疼。
关于c - Linux 的嵌入式系统中断/硬件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4919477/