免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2448 | 回复: 6
打印 上一主题 下一主题

[内核模块] 硬件发出中断后死机的问题? 用gdb怎么跟踪死机的痕迹? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-12 19:55 |只看该作者 |倒序浏览
我现在用一个PCI板卡产生中断,中断周期设定在10ms, 中断一开始就马上死机,只剩下屏幕光标在闪,键盘全部失效了。
问,碰到这种情况该怎么办?
用KGDB跟踪,单步执行到硬件发出中断的指令后,目标机同样死掉,只剩下屏幕光标闪;根本就进不到中断处理程序里面去。
但是我跟踪 request_irq( )是正常的。
请问有什么办法能抓住死机的痕迹?像这样一下死掉,任何反应都没有,不知道该怎么跟踪,发现问题?
我现在用DDD调试,有什么命令能够继续我内核深处跟踪,找到死机的根源?

麻烦各位前辈指教一下。

论坛徽章:
0
2 [报告]
发表于 2013-04-12 20:02 |只看该作者
看看                                             

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
3 [报告]
发表于 2013-04-12 20:08 |只看该作者
单步执行到硬件发出中断的指令后

猜:写错Register了。

论坛徽章:
0
4 [报告]
发表于 2013-04-12 20:25 |只看该作者
回复 3# folklore


    我也跟你有同样的怀疑,
但是我是有一个这个板卡windows下的驱动程序。这个windows下的驱动一切正常;
我先对这个windows驱动源码用softice一步一步验证了各个register的读写内容;
然后按照同样的方法,对linux下的驱动用DDD 一步一步跟踪,实在找不出register的问题。

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
5 [报告]
发表于 2013-04-12 21:29 |只看该作者
回复 4# guoissac


    pci的端口号不是固定的, 如果Windows下正好分配到可用的端口号, 则无事, Linux下分配到不是期望的端口号,则死了。
先看看有没有做端口号是否分配成功检测(及定位到正确的基地址)。


PS: Softice还能在Windows 7下跑?或者你还在用xp?

论坛徽章:
0
6 [报告]
发表于 2013-04-12 22:35 |只看该作者
回复 5# folklore

感谢您的指点,我再去验证一下。

   

论坛徽章:
0
7 [报告]
发表于 2013-04-14 15:10 |只看该作者
回复 4# guoissac


    感谢folklore先生的指点,我又仔细折腾了一遍我的驱动代码,发现对PCI基地址和PCI 的Register的操作代码还是有问题;
后来又搜到一篇文章,是翻译 /Documentation/PCI/pci.txt的;但是译的不好,于是又仔细读了原文,发现这么一段:

3.2 Request MMIO/IOP resources
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Memory (MMIO), and I/O port addresses should NOT be read directly from the PCI device config space.
Use the values in the pci_dev structure as the PCI "bus address" might have been remapped to a "host physical" address by the arch/chip-set specific kernel support.

然后看了我自己的代码,发现没有按照上面这段话说的那样"Use the values in the pci_dev structure" , 我把pci_resource_start()获得的BAR 赋值给了另外一个变量,后面对Register的操作都是通过这个变量来进行,导致死机。

改为 “Use the values in the pci_dev structure”,问题解决;

现在中断程序跑得哗哗的。

感谢folklore先生的指点,感谢各位。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP