我有一个简单的内核模块,并想定义一个IRQ。如果我在代码中调用以下函数,则无法插入模块:
result = request_irq(12,
test_irq,
0,
"testgpio",
NULL); 这是来自insmod的错误:
insmod: ERROR: could not insert module gpioc.ko: Invalid parameters硬件是2 GB的RPI 4和64位的Ubuntu。
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“的用法不明确。这里特别是第一个参数!
有没有人知道工作示例在哪里?
发布于 2020-12-09 16:46:17
根据注释,显然你从request_irq()得到了EINVAL错误。请求的IRQ可能不正确。对于GPIO,您可能需要使用函数来获取与给定GPIO关联的IRQ。
GPIO documentation文档提供了GPIO号的引脚。后者被传递给gpio_to_irq()以获取IRQ。
https://stackoverflow.com/questions/65211944
复制相似问题