2011-02-07 60 views
3

在我的AT91SAM9RL-EK ARM板上運行Linux 2.6.30 buildroot,我有以下幾點。來自Linux的嵌入式系統中斷/硬件處理

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 
+0

有一點更多信息,將不勝感激。在另一個評論你說,「按鈕工作正常」。大多數情況下,GPIO已經被註冊爲輸入設備,它們有一個自定義驅動程序,或者通過gpiolib(/ sys/class/gpio)向用戶空間提供狀態(和邊緣觸發)。 – kauppi

+0

在fs上,gpio-keys位於/ sys/bus/platform/devices/leds-gpio /和sys/class/input/input0 /中,但我不知道如何與它們通信 – Gobliins

+0

'#ls input0:功能id名稱子系統設備輸入:event0 phys uevent event0 modalias power uniq' – Gobliins

回答

3

我沒有您的主板一個明確的答案,但我可以給你一些指針,你所需要的信息。

解決您的問題最簡單的方法是放棄'中斷處理程序'的要求,只需輪詢GPIO線。你可以從用戶空間做到這一點,只要你是根。許多開發環境都提供了內核模塊來爲您執行此操作,並將結果作爲/dev/proc中的條目公開。

如果你打算處理中斷,你需要編寫一個Linux設備驅動程序。從這裏開始的最好的地方就是真棒Linux設備驅動程序的書,下載在http://lwn.net/Kernel/LDD3/

一個GPIO驅動程序非常簡單,將主要包括向register_irq()一個電話,您的用戶空間界面的代碼。用戶空間接口代碼將比其他代碼大得多,同時也是最讓你頭痛的問題。

+0

Thx,應該已經有一些設備驅動程序,因爲按鈕工作正常,我只需要修改它們。我會查看網址。 – Gobliins

1

我對特定的電路板和buildroot沒有任何經驗,但在內核樹中的Documentation dir中查看gpio.txt可能很有趣。關於如何使用sysfs從用戶空間使用GPIO有一些解釋。

+0

多數民衆贊成在那裏我有點卡住,因爲我的系統/類/目錄沒有/ gpio subdir。 'ls/sys/class:backlight graphics mem net scsi_host tty bdi ieee80211 misc rtc sound vc dma input mmc_host scsi_device spi_master vtconsole firmware leds mtd scsi_disk spidev' – Gobliins

+0

好的我發現/ sys/bus/platform/devices/gpio-keys – Gobliins