当前位置: 技术问答>linux和unix
请问这个oops是什么意思?
来源: 互联网 发布时间:2016-02-10
本文导语: irq16: nobody cared PC is at __do_softirq+0x48/0x50 LR is at asm_do_IRQ+0x3c8/0x50 pc : [] lr : [] Not tainted sp : c020ffb0 ip : c020ffb0 fp : c020ffbc r10: c03c3300 r9 : c03b9f64 r8 : c02f5798 r7 : c01f77a4 r6 : 0000000a r5 : fefff000...
irq16: nobody cared
PC is at __do_softirq+0x48/0x50
LR is at asm_do_IRQ+0x3c8/0x50
pc : [] lr : [] Not tainted
sp : c020ffb0 ip : c020ffb0 fp : c020ffbc
r10: c03c3300 r9 : c03b9f64 r8 : c02f5798
r7 : c01f77a4 r6 : 0000000a r5 : fefff000 r4 : 00000022
r3 : 20000013 r2 : c01f1fa0 r1 : c03b8000 r0 : 00000001
Flags: nzCv IRQs on FIQs on Mode SVC_32 Segment user
Control: C000317F Table: 23EEC000 DAC: 00000015
handlers:
[] (keys1_irq_isr+0x0/0x6c)
key = 1
我写了一个linux2.6下按键的驱动,用中断做的,keys1_irq_isr是中断处理程序,程序运行后能正常处理中断显示按键值key =1,就是不知道为什么总是出现上面这些信息
PC is at __do_softirq+0x48/0x50
LR is at asm_do_IRQ+0x3c8/0x50
pc : [] lr : [] Not tainted
sp : c020ffb0 ip : c020ffb0 fp : c020ffbc
r10: c03c3300 r9 : c03b9f64 r8 : c02f5798
r7 : c01f77a4 r6 : 0000000a r5 : fefff000 r4 : 00000022
r3 : 20000013 r2 : c01f1fa0 r1 : c03b8000 r0 : 00000001
Flags: nzCv IRQs on FIQs on Mode SVC_32 Segment user
Control: C000317F Table: 23EEC000 DAC: 00000015
handlers:
[] (keys1_irq_isr+0x0/0x6c)
key = 1
我写了一个linux2.6下按键的驱动,用中断做的,keys1_irq_isr是中断处理程序,程序运行后能正常处理中断显示按键值key =1,就是不知道为什么总是出现上面这些信息
|
oops是你在系统执行软中断时候出现,即系统出了你的keys1_irq_isr函数就立即去执行软中断处理了
你现在需要修改的就是不你keys1_irq_isr里面的东西优化,进中断记得关中断,出中断记得开中断
还有不要调用有休眠功能的任何内核函数和锁
你现在需要修改的就是不你keys1_irq_isr里面的东西优化,进中断记得关中断,出中断记得开中断
还有不要调用有休眠功能的任何内核函数和锁
|
错误出现在软中断处理函数中,好像是你在中断处理函数中调用了软中断处理函数,OOPS是说你的PC值在do_softirq 数中,而lr寄存器中存储的却是asm_do_IRQ中的地址,也就是被压入栈中的函数返回地址是asm_do_IRQ
多半是你的中断处理函数中做了一些不该做的事情,比如直接或者间接调用了软中断处理函数
多半是你的中断处理函数中做了一些不该做的事情,比如直接或者间接调用了软中断处理函数
|
如果是去抖动,可以用内核定时器做效率要好些
|
这个说明中断处理函数注销后,该中断还在产生
所以注销中断处理函数后,disable_irq()之,或编程硬件,使之不产生中断
所以注销中断处理函数后,disable_irq()之,或编程硬件,使之不产生中断