Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1310769
  • 博文数量: 107
  • 博客积分: 10155
  • 博客等级: 上将
  • 技术积分: 2166
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-25 16:57
文章分类

全部博文(107)

文章存档

2010年(1)

2009年(1)

2008年(105)

分类: LINUX

2008-04-11 17:14:10

升级内核到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);    
}
只要遇到此种问题就这样纠正,问题肯定会迎刃而解。
阅读(2226) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~