On my AT91SAM9RL-EK ARM board, running a Linux 2.6.30 buildroot, I have the following.
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
The right and left click are the buttons on my board. Now I want to modify the interrupt handlers for the buttons (for example that they give me an output when clicked).
Where can 开发者_如何学GoI find the interrupt handlers or drivers (or the sourcefiles for them) for the buttons?
Or can I write my own drivers and register them (while I am in user-space) for the buttons and how?
This is some data from the boards guide about the 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
I don't have a specific answer for your board, but I can give you some pointers with the information you need.
The simplest way to solve your problem is to drop the 'interrupt handlers' requirement and simply poll the GPIO lines. You can do this from userspace, so long as you're root. Many development environments supply a kernel module to do this for you, exposing the results as an entry in /dev
or /proc
.
If you're going to handle interrupts, you need to write a Linux device driver. The best place to start here is the awesome Linux Device Drivers book, downloadable at http://lwn.net/Kernel/LDD3/
A GPIO driver is very simple and will mostly consist of a call to register_irq()
and your userspace interface code. The userspace interface code will be much larger than the rest of the code and also cause you the most headaches.
I don't have any experience with the specific board and buildroot, but it might be interesting to look into gpio.txt in the Documentation dir inside the kernel tree. There's some explanation on how to use GPIO from userspace using sysfs.
精彩评论