升级内核到2.6.24后,原来的驱动都不能正常使用了,编译时首先是出现在注册中断函数:
int ret=request_irq(irq,&button_irq,0,DEVICE_NAME,&g_keyBuffer);
内核提示错误说参数数目不对,我一直看这行,结果问题不在request_irq()这个函数,而在于注册的中断处理函数button_irq():
static irqreturn_t button_irq(int irq, void *dev_id, struct pt_regs *regs)
{
。。。。。。。
}
错误就出现这里的参数数目不对上,去掉第三个参数,重新编译,问题解决。
static irqreturn_t button_irq(int irq, void *dev_id)
但是还有一些警告信息,大多是这样:
warning: ISO C90 forbids mixed declarations and code
对照他提示的错误行,发现是代码与变量声明在函数中位置影响造成的,于是把变量声明全部移到函数的最前方,在代码之前,再次编译,警告消除了。
static void __exit button_exit(void)
{
disable_irqs();
free_irqs();
cdev_del(my_cdev);
dev_t devno = MKDEV(major, 0);
class_device_destroy(my_class, devno);
class_destroy(my_class);
unregister_chrdev_region(devno, 1);
}
修改成这样:
static void __exit button_exit(void)
{
dev_t devno;
disable_irqs();
free_irqs();
cdev_del(my_cdev);
devno = MKDEV(major, 0);
class_device_destroy(my_class, devno);
class_destroy(my_class);
unregister_chrdev_region(devno, 1);
}
只要遇到此种问题就这样纠正,问题肯定会迎刃而解。
阅读(2318) | 评论(0) | 转发(0) |