Linux kernel 端口B GPIO ep93xx/GPIO.c中断问题

Linux kernel 端口B GPIO ep93xx/GPIO.c中断问题,linux-kernel,arm,gpio,Linux Kernel,Arm,Gpio,我遇到gpio中断问题。 根据ep93xx的文档,端口A、B、F可以配置为生成中断。 引述: 19条GPIO线路中的任何一条都可能被配置为产生中断 但是,arch/arm/march-ep93xx/gpio.c只处理来自端口A的中断,不对端口B和F做出反应 static void ep93xx_gpio_ab_irq_handler(unsigned int irq, struct irq_desc *desc) { unsigned char status; int i;

我遇到gpio中断问题。 根据ep93xx的文档,端口A、B、F可以配置为生成中断。 引述:

19条GPIO线路中的任何一条都可能被配置为产生中断

但是,arch/arm/march-ep93xx/gpio.c只处理来自端口A的中断,不对端口B和F做出反应

static void ep93xx_gpio_ab_irq_handler(unsigned int irq, struct irq_desc *desc)
{
    unsigned char status;
    int i;
    printk(KERN_INFO "ep93xx_gpio_ab_irq_handler: irq=%u", irq);
我知道printk在irq_处理程序中很糟糕

我正在通过sysfs配置iterrupts

GPIO 0,8与端口F连接(如果有重要问题)。 另外,在未配置端口A的情况下启用端口B上的中断时,我会收到以下警告:

------------[ cut here ]------------
WARNING: at drivers/gpio/gpiolib.c:103 gpio_ensure_requested+0x54/0x118()
autorequest GPIO-1
Modules linked in:
[<c002696c>] (unwind_backtrace+0x0/0xf0) from [<c00399d4>] (warn_slowpath_fmt+0x54/0x78)
[<c00399d4>] (warn_slowpath_fmt+0x54/0x78) from [<c019dd90>] (gpio_ensure_requested+0x54/0x118)
[<c019dd90>] (gpio_ensure_requested+0x54/0x118) from [<c019e05c>] (gpio_direction_input+0xb0/0x150)
[<c019e05c>] (gpio_direction_input+0xb0/0x150) from [<c002c9a8>] (ep93xx_gpio_irq_type+0x3c/0x1d8)
[<c002c9a8>] (ep93xx_gpio_irq_type+0x3c/0x1d8) from [<c0066ad8>] (__irq_set_trigger+0x38/0x9c)
[<c0066ad8>] (__irq_set_trigger+0x38/0x9c) from [<c0066e14>] (__setup_irq+0x2d8/0x354)
[<c0066e14>] (__setup_irq+0x2d8/0x354) from [<c0066f38>] (request_threaded_irq+0xa8/0x140)
[<c0066f38>] (request_threaded_irq+0xa8/0x140) from [<c019e784>] (gpio_setup_irq+0x14c/0x260)
[<c019e784>] (gpio_setup_irq+0x14c/0x260) from [<c019ec1c>] (gpio_edge_store+0x90/0xac)
[<c019ec1c>] (gpio_edge_store+0x90/0xac) from [<c01be8fc>] (dev_attr_store+0x1c/0x28)
[<c01be8fc>] (dev_attr_store+0x1c/0x28) from [<c00e8b2c>] (sysfs_write_file+0x168/0x19c)
[<c00e8b2c>] (sysfs_write_file+0x168/0x19c) from [<c009a3d4>] (vfs_write+0xa4/0x160)
[<c009a3d4>] (vfs_write+0xa4/0x160) from [<c009a6a4>] (sys_write+0x3c/0x7c)
[<c009a6a4>] (sys_write+0x3c/0x7c) from [<c0020e40>] (ret_fast_syscall+0x0/0x2c)
---[ end trace ff56c09a294dbe68 ]---
此外,我还浏览了gpio.c和gpiolib.c的更改历史,没有发现任何与此问题相关的内容


有人能就这个问题给我一些建议吗?我希望所有端口(A、B、F)上都有中断,而不仅仅是A。

关于(和)有很多问题。请看它们

通过查看较新的日志和and,我们可以看到许多变化。您应该能够获取当前的Linux稳定树,提取这些补丁,并将它们重新移植到内核。例如,存在一个错误,其中端口C和F被交换;我不知道这是否在您的ts7200_matt变型中

要查看的一些重要更改集

  • 手臂:折叠irq\U套件\U芯片/irq\U套件\U处理器
  • arm:清理irq命名空间
  • arm:ep93xx:使用适当的irq访问器功能
  • arm:ep93xx:添加基本中断信息
  • ARM:ep93xx:irq\U数据转换。
  • ARM:5954/1:ep93xx:将gpio中断支持移动到gpio.c
  • [ARM]5243/1:ep93xx:错误修复,GPIO端口C和F被交换
  • 您可能有#6,但它值得一看,因为它基本上是控制器的中断实现。大约在linux-3.0之后,SOC的GPIO控制器被移动到drivers/GPIO/GPIO-ep93xx.c。您可能希望查看这些更改,但它们似乎都与您的问题无关。您应该知道Linux的结构变化。即,中断处理和/或通用GPIO基础设施的总体变化。一个很好的猜测是,托马斯·格雷克斯纳(Thomas Gleixner)或罗素·金(Russell King)将做出这些改变

    可以使用git格式的补丁b685004从特定的Linux稳定树中提取补丁。。b0ec5cf1 gpio.c。这将创建多个修补程序文件。将它们移动到树中,并使用
    gitam
    patch-p1
    进行应用。你可能需要按摩这些文件,让它们干净地应用到你的树上;如果你把它们都拿走了,即使它们与中断处理无关,你会更幸运地自动完成这项工作。您还可以查看修补程序集,并尝试使用文本编辑器手动修补文件

    这些都不能解决您的具体问题。但是,它提供了一个合并最新Linux版本更改的路径。另外,前面的堆栈溢出问题提供了有关堆栈结构的详细信息。结合您的数据表、和给定的更改集,您应该能够解决自己的问题。否则,您需要熟悉EP93xx的人,并且问题是相当本地化的

    注意:堆栈跟踪表明正在使用GPIO,而没有相应的
    GPIO\U请求()
    
    . 这可能是机器文件或EP93xx GPIO中断处理代码中的错误。

    关于(和)有很多问题。请看它们

    通过查看较新的日志和and,我们可以看到许多变化。您应该能够获取当前的Linux稳定树,提取这些补丁,并将它们重新移植到内核。例如,存在一个错误,其中端口C和F被交换;我不知道这是否在您的ts7200_matt变型中

    要查看的一些重要更改集

  • 手臂:折叠irq\U套件\U芯片/irq\U套件\U处理器
  • arm:清理irq命名空间
  • arm:ep93xx:使用适当的irq访问器功能
  • arm:ep93xx:添加基本中断信息
  • ARM:ep93xx:irq\U数据转换。
  • ARM:5954/1:ep93xx:将gpio中断支持移动到gpio.c
  • [ARM]5243/1:ep93xx:错误修复,GPIO端口C和F被交换
  • 您可能有#6,但它值得一看,因为它基本上是控制器的中断实现。大约在linux-3.0之后,SOC的GPIO控制器被移动到drivers/GPIO/GPIO-ep93xx.c。您可能希望查看这些更改,但它们似乎都与您的问题无关。您应该知道Linux的结构变化。即,中断处理和/或通用GPIO基础设施的总体变化。一个很好的猜测是,托马斯·格雷克斯纳(Thomas Gleixner)或罗素·金(Russell King)将做出这些改变

    可以使用git格式的补丁b685004从特定的Linux稳定树中提取补丁。。b0ec5cf1 gpio.c
    。这将创建多个修补程序文件。将它们移动到树中,并使用
    gitam
    patch-p1
    进行应用。你可能需要按摩这些文件,让它们干净地应用到你的树上;如果你把它们都拿走了,即使它们与中断处理无关,你会更幸运地自动完成这项工作。您还可以查看修补程序集,并尝试使用文本编辑器手动修补文件

    这些都不能解决您的具体问题。但是,它提供了一个合并最新Linux版本更改的路径。另外,前面的堆栈溢出问题给出了
    binutils-2.23.1
    gcc-4.7.3
    glibc-2.17
    
    ------------[ cut here ]------------
    WARNING: at drivers/gpio/gpiolib.c:103 gpio_ensure_requested