【发布时间】:2021-03-20 13:02:02
【问题描述】:
我有一个简单的内核模块,想定义一个 IRQ。如果我在代码中调用以下函数,则无法插入模块:
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;
}
@我试过这个来获取 irq 号但没有成功:
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;
}
不清楚使用函数“gpiod_get”。这里尤其是第一个参数!
有人知道工作示例在哪里吗?
【问题讨论】:
-
如何插入模块?命令行?
-
sudo insmod gpioc.ko
-
内核日志中是否有任何消息:“dmesg”命令的结果?
-
GPIO_TEST:中断请求结果为:-22
-
可以分享一下 /proc/interrupts 的内容吗?
标签: linux ubuntu-20.04