Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Linux下的嵌入式系统中断/硬件处理_C_Linux_Embedded_Arm_Interrupt - Fatal编程技术网

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

C Linux下的嵌入式系统中断/硬件处理,c,linux,embedded,arm,interrupt,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_c

在运行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

我对你的董事会没有一个具体的答案,但我可以给你一些你需要的信息

解决问题的最简单方法是放弃“中断处理程序”要求,只需轮询GPIO行。您可以从用户空间执行此操作,只要您是root用户。许多开发环境都提供了一个内核模块来为您实现这一点,将结果作为条目公开在
/dev
/proc

如果要处理中断,需要编写Linux设备驱动程序。从这里开始最好的地方是令人敬畏的Linux设备驱动程序手册,可在


GPIO驱动程序非常简单,主要由调用
register\u irq()
和用户空间接口代码组成。用户空间接口代码将比其他代码大得多,这也会给您带来最大的麻烦

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

Thx,应该已经有一些设备驱动程序了,因为按钮工作正常,我只需要修改它们。我会查看网址。请提供更多信息。在另一条评论中,你说“按钮工作正常”。最有可能的是,GPIO已经注册为输入设备,它们有一个自定义驱动程序,或者状态(和边缘触发)可以通过gpiolib(/sys/class/GPIO)提供给用户空间,gpio键位于/sys/bus/platform/devices/led gpio/和sys/class/input/input0/中,但我不知道如何与它们通信
#ls input0:capabilities id name subsystem device input:event0 phys uevent event0 modalias power uniq
好,我又聪明了一点。我可以轮询/dev/input/event0以读取按钮。但是可能有一种更好的方法代替轮询。这就是我被卡住的地方,因为我的sys/class/目录没有/gpio子目录<代码>ls/sys/class:背光图形内存网络scsi_主机tty bdi ieee80211杂项rtc声音vc dma输入mmc_主机scsi_设备spi_主机VT控制台固件指示灯mtd scsi_磁盘spidev