急,请教!系统Caps灯闪烁,所有按键失效

hchcsdn 2012-04-17 05:18:57
系统偶尔发生僵死,有时几个小时,有时几天发生一次。
Kernel panic - not syncing: Attempted to kill the idle task!

出错堆栈地点也不确定。
1.出错堆栈显示在PCI中断处理程序中。
2.显示在count2nano【rati_schec】
3.显示在common_interrupt.
4.Bad EIP Value。

版本Linux(2.6.29.4),rtai(3.7.1)
...全文
392 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hchcsdn 2012-04-20
  • 打赏
  • 举报
回复
好的,我试试
deep_pro 2012-04-19
  • 打赏
  • 举报
回复
我没有实时linux环境
下载了rtai3.8版本的tar包
发现rt_spisr 这个中断服务函数中有大量rt_sem_signal的使用
hchcsdn 2012-04-19
  • 打赏
  • 举报
回复
再请教,在中断函数中调用rt_sem_signal()函数是否有问题??
deep_pro 2012-04-19
  • 打赏
  • 举报
回复
既然common_interrupt+0x15/0x40 这里出现次数比较多,那就从这里入手看看

首先找到common_interrupt 的源文件,objdump第一次反汇编common_interrupt所在的.o,
可以得到common_interrupt 基址偏移0x15 的机器码

然后 -g 选项再编译一次这个.o ,反汇编能得到带源代码的.S ,根据机器码和偏移,就能找到这条汇编对应的c代码
从那行c代码入手可能容易些
hchcsdn 2012-04-19
  • 打赏
  • 举报
回复
串口获得的信息

BUG: unable to handle kernel paging request at 009cffff
IP: [<c0103811>] common_interrupt+0x15/0x40
Oops: 0000 [#1] PREEMPT SMP
last sysfs file: /sys/class/drm/card0/uevent
Modules linked in: Softservo(P) plcki rtai_serial rtai_tasklets rtai_math rtai_shm rtai_sem rtai_fifos rtai_sched rtai_hal uhci_hcd r8169 ehci_hcd evdev

Pid: 0, comm: swapper Tainted: P (2.6.29.4-rtai #12)
EIP: 0060:[<c0103811>] EFLAGS: 00010286 CPU: 0
EIP is at common_interrupt+0x15/0x40
EAX: c0514000 EBX: 00000000 ECX: 00000000 EDX: 8900007b
ESI: c0567ec0 EDI: c0511f50 EBP: 009d0003 ESP: c0515f9c
DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
Process swapper (pid: 0, ti=c0514000 task=c04d4300 task.ti=c0514000)
I-pipe domain Linux
Stack:
00000000 00000000 c058fc40 c0567ec0 c0511f50 009d0003 c0514000 0000007b
c058007b 000000d8 ffffff96 c0109fc8 00000060 00000246 c0101cd1 c0543340
0008d800 c0503000 c0519985 0000007a c0519230 00000000 c0544240 00000812
Call Trace:
[<c0109fc8>] default_idle+0x38/0x50
[<c0101cd1>] cpu_idle+0x61/0xa0
Code: eb 12 6a 84 eb 0e 6a 83 eb 0a 6a 82 eb 06 6a 81 eb 02 6a 80 eb 00 83 04 24 80 fc 0f a0 06 1e 50 55 57 56 52 51 53 ba 7b 00 00 00 <8e> da 8e c2 ba d8 00 00 00 8e e2 89 e0 ff 15 1c 7e 4d c0 85 c0
EIP: [<c0103811>] common_interrupt+0x15/0x40 SS:ESP 0068:c0515f9c
---[ end trace 9ec27e933eade071 ]---
Kernel panic - not syncing: Attempted to kill the idle task!
deep_pro 2012-04-18
  • 打赏
  • 举报
回复
这个概念我理解不深
我个人觉得(不见得对),普通linux在处理一个中断时,其他中断,甚至时钟中断都无法打断当前执行的硬中断。也就是linux不支持中断嵌套(没有验证)。
如果别的中断不需要及时处理也没有大问题,那你在一个中断服务里忙等1s都没事。

实时linux神马情况就不知道了。
你可以尝试把你的linux内核的HZ改小一些,例如100,这样1s只有100个时钟中断,看看能否缓解你的问题。
deep_pro 2012-04-18
  • 打赏
  • 举报
回复

在普通linux下,我就算在中断里写个忙等待(当然不是睡眠),例如忙等1s都没有问题
除了系统时钟变慢1s

但是实时linux 就不知道了
hchcsdn 2012-04-18
  • 打赏
  • 举报
回复
谢谢deep_pro.
请教,反过来问一下,如果PCI设备中断处理长时间占用CPU,系统可能会发生什么问题??
deep_pro 2012-04-17
  • 打赏
  • 举报
回复
实时内核我没用过
不过中断处理恐怕不允许长时间占用cpu
有很多中断底半部机制可以使用 这也就是为了让中断服务程序迅速结束
hchcsdn 2012-04-17
  • 打赏
  • 举报
回复
PCI设备是公司开发的一块板卡,PCI驱动也是自身开发,中断处理程序计算量比较大,目前想怎么去找问题?
deep_pro 2012-04-17
  • 打赏
  • 举报
回复
还是实时内核啊

至少你能定位到具体是那个pci设备的驱动出了问题吧,先不加载这个驱动试试

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧