在2.6的内核中,编译ldd3使用request_irq函数申请中断时,编译时出现了warning: passing argument 2 of
'request_irq' from incompatible pointer
type的警告信息。
request_irq函数调用如下:
for (i = 0; trials[i]; i++)
tried[i] = request_irq(trials[i], short_probing,
IRQF_SHARED, "short probe", NULL);
short_probing函数的原型如下:
irqreturn_t short_probing(int irq, void *dev_id,struct pt_regs *regs)
报警的提示意思是第二个参数指针类型不匹配。
short_probing函数的原型,
应该由:
irqreturn_t short_probing
(int irq, void *dev_id,struct pt_regs *regs)改为:
irqreturn_t short_probing
(int irq, void *dev_id)在
linux/include/linux/interrupt.h中有这么一个定义
typedef irqreturn_t (*irq_handler_t)(int, void *);
定义一种函数指针类型irq_handler_t, 这种函数的返回类型为irqreturn_t,参数列表为int, void*
再来看request_irq的函数声明部分
kernel/irq/manage.c:
int request_irq(
unsigned int irq,
irq_handler_t handler,
unsigned long irqflags,
const char *devname,
void *dev_id)request_irq的第二个参数是handler函数,类型是
irq_handler_t,
request_irq() 函数原型:
/********************************/
include/linux/irqreturn.h:typedef int irqreturn_t;
include/linux/interrupt.h:typedef irqreturn_t (*irq_handler_t)(int, void *);
kernel/irq/manage.c:int request_irq(
unsigned int irq,
irq_handler_t handler,
unsigned long irqflags,
const char *devname,
void *dev_id)
/********************************/
阅读(12410) | 评论(0) | 转发(0) |