【问题标题】:Embedded system interrupt / hardware handling from Linux来自 Linux 的嵌入式系统中断/硬件处理
【发布时间】:2011-06-22 14:42:21
【问题描述】:

在我的 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 已经注册为输入设备,它们有一个自定义驱动程序,或者状态(和边缘触发)可通过 gpiolib (/sys/class/gpio) 提供给用户空间。
  • 在 fs 上,gpio-keys 位于 /sys/bus/platform/devices/leds-gpio/ 和 sys/class/input/input0/ 但我不知道如何与他们
  • # ls input0: capabilities id name subsystem device input:event0 phys uevent event0 modalias power uniq
  • 好吧,我又聪明了一点。我可以轮询 /dev/input/event0 以读取按钮。但也许有更好的方法来代替轮询。

标签: c linux embedded arm interrupt


【解决方案1】:

我对你的董事会没有具体的答案,但我可以为你提供一些你需要的信息。

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

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

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

【讨论】:

  • Thx,应该已经有一些设备驱动程序,因为按钮工作正常,我只需要修改它们。我去看看网址。
【解决方案2】:

我对特定板和 buildroot 没有任何经验,但查看内核树内文档目录中的 gpio.txt 可能会很有趣。有一些关于如何使用 sysfs 从用户空间使用 GPIO 的说明。

【讨论】:

  • 这就是我卡住的地方,因为我的 sys/class/ 目录没有 /gpio 子目录。 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
猜你喜欢
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多