- 论坛徽章:
- 0
|
回复 1楼 gqm 的帖子
这个问题我以解决了。现在和大家分享一下!
这个问题主要是应为在2.6中,中断函数的声明已经变了!
在2.4中中断注册声明在#include <asm/unistd.h>这个头文件中,在2.6中中断注册声明在#include <asm/irq.h>
在2.4中void soe_interrupt (int soe_irq,void *dev_id,struct pt_regs *regs)在内核调度是没有问题的
虽然在2.6中这样编译也可以用,但是内核会打印出
handlers:
[<d0893782>] (soe_interrupt+0x0/0x167 [soenew])
irq event 3: bogus return value ff
[<c0107da9>] __report_bad_irq+0x3a/0x77
[<c01081b1>] note_interrupt+0x23/0x1c4
[<c01088c3>] do_IRQ+0x24d/0x309
[<c030c138>] common_interrupt+0x18/0x20
[<c0225961>] write_chan+0x95/0x1d6
[<c011cb66>] default_wake_function+0x0/0xc
[<c011cb66>] default_wake_function+0x0/0xc
[<c021e9cf>] tty_write+0x321/0x431
[<c02258cc>] write_chan+0x0/0x1d6
[<c01672fe>] vfs_write+0xb6/0xe2
[<c01673c8>] sys_write+0x3c/0x62
[<c030bf47>] syscall_call+0x7/0xb
[<c030007b>] xfrm_state_lookup+0xea/0x151
这样我就不能急时的到中断数据,这样使用是有问题的!
解决方法如下:
在2.6中static irqreturn_t soe_interrupt (int soe_irq,void *dev_id,struct pt_regs *regs)才能调度
{
int handled=0;
return IRQ_RETVAL(handled);
}
问题就没有了。详细的可一看一下kernel文件内的8139too.c程序!
还有就是我用的那个阻塞方式interruptible_sleep_on在2.6中反对用的个
现在用wait_event_interruptible(wd ,condition);
在2.4中也有这个宏!
说的可能不是很详细,又要问的在给我回贴子!希望能有帮助 |
|