当前位置:  技术问答>linux和unix

2.6下用request_irq引起的问题!

    来源: 互联网  发布时间:2016-05-07

    本文导语:  奇怪的是在2.6用request_irq时发现好几个问题,希望大家帮忙看一下 我引入的头文件如下: #include  #include  #include  #include #include 1、不认识SA_INTERRUPT,会提示 implicite declartion of SA_INTERRUPT 后来发现2.6下没有对SA_INTER...

奇怪的是在2.6用request_irq时发现好几个问题,希望大家帮忙看一下
我引入的头文件如下:
#include 
#include 
#include 
#include
#include

1、不认识SA_INTERRUPT,会提示 implicite declartion of SA_INTERRUPT
后来发现2.6下没有对SA_INTERRUPT的宏定义,而在2.4下定义为0x20000000。但是若在request_irq时直接用0x20000000时则可以用,而且成功后返回值为0
但是我在2.6下用哪个中断标志比较好呢?

2、编译的时候提示一个警告:
warning: passing argument 2 of ‘request_irq’ from incompatible pointer type

3、运行时触发中断时发生:
irq event 126: bogus return value b0043000
Call Trace:
[] dump_stack+0x8/0x34
[] __report_bad_irq+0x44/0xd8
[] note_interrupt+0x348/0x3c8
[] __do_IRQ+0x164/0x1a4
[] plat_irq_dispatch+0x268/0x288
[] ret_from_irq+0x0/0x4
[] MACTasks+0xf54/0x28b4 [zigbee]
[] ZigBeeTasks+0x1d8/0x43c [zigbee]
[] testRfd+0xb0/0xca8 [zigbee]
[] uspi_ioctl+0x18/0x30 [zigbee]
[] do_ioctl+0xc4/0xd4
[] vfs_ioctl+0x74/0x3d4
[] sys_ioctl+0x50/0x98
[] stack_done+0x20/0x3c

handlers:
[] (HighISR+0x0/0x474 [zigbee])


以上三个问题在网上好像说的人也不多,没有看明白,特地来向大家讨教。谢谢!

|
关于2, 参数strcut pt_regs 去掉了,因为没有用。

irqreturn_t (*handler)(int, void *, struct pt_regs *) 
int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *),
                unsigned long flags, const char *dev_name, void *dev_id);

变为
typedef irqreturn_t (*irq_handler_t)(int, void *);
int request_irq(unsigned int irq, irq_handler_t handler,
                unsigned long irqflags, const char *devname, void *dev_id)


|
这个是中间过渡版本里的定义,自从2.6.24后就被remove了。 你可以用对应的现在的宏,IRQF_DISABLED
原来以SA_开头的定义很不好,跟信号容易混到一块。
还有SA_INTERRUPT指的是快速中断也不明显,现在意思清楚了很多。
+/*
+ * Migration helpers. Scheduled for removal in 1/2007
+ * Do not use for new code !
+ */
+#define SA_INTERRUPT           IRQF_DISABLED
+#define SA_SAMPLE_RANDOM       IRQF_SAMPLE_RANDOM
+#define SA_SHIRQ               IRQF_SHARED
+#define SA_PROBEIRQ            IRQF_PROBE_SHARED 

|
关于问题2,请检查你用的内核源码中request_irq函数的原形,看看与你程序中使用的request_irq函数参数类型是否一致,我记得是改动过。
如果不相同最好修改程序中的定义方式,改动很小,很容易。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • request_irq() enable_irq() and disable_irq() 如何使用、、、???
  • request_irq中断,驱动加载后出现init_module:Device or resource busy
  • request_irq和free_irq出错了,大家帮忙看看。
  • request_irq 與free_irq問題


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3