繁体   English   中英

Linux kernel insmod 失败,错误无效参数

[英]Linux kernel insmod failed with error Invalid parameters

我有一个简单的 kernel 模块并想定义一个 IRQ。 如果我在代码中调用如下function,模块无法插入:

   result = request_irq(12,     
                        test_irq,  
                        0,   
                        "testgpio", 
                        NULL); 

这是来自 insmod 的错误:

insmod: ERROR: could not insert module gpioc.ko: Invalid parameters

硬件是具有 2 GB 和 Ubuntu 64 位的 RPI 4。

static irqreturn_t test_irq(int irq, void *data)
{
    /*interrupt-handling*/

    return IRQ_HANDLED;
}

@我试过这个来获取中断号但没有成功:

  struct gpio_desc *gpio = NULL;
   gpio = gpiod_get(NULL, "SPI_CE0_N", GPIOD_OUT_HIGH);
    if (NULL == gpio){
      printk(KERN_INFO "GPIO_TEST: invalid GPIO16\n");
      return -ENODEV;
   }

   int n = gpiod_to_irq(gpio);
    if (n <= 0){
      printk(KERN_INFO "GPIO_TEST: invalid IRQ\n");
      return -ENODEV;
   }

不清楚使用 function “gpiod_get”。 这里特别是第一个参数!

有谁知道一个工作示例存在于哪里?

显然,根据评论,您从request_irq()收到EINVAL错误。 请求的 IRQ 可能不正确。 对于 GPIO,您可能需要使用gpio_to_irq() function 来获取与给定 GPIO 关联的 IRQ。

GPIO 文档文档提供了 GPIO 编号的引脚。 后者被传递给gpio_to_irq()以获取 IRQ。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM