免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: gandeyao

linux驱动中断服务导致内核崩溃求教!新手注意!大虾赐教啊! [复制链接]

论坛徽章:
0
发表于 2010-11-05 15:19 |显示全部楼层
回复 10# snail_314


    不太明白,我没有反汇编过,这样做能看出来什么吗?

论坛徽章:
0
发表于 2010-11-05 15:21 |显示全部楼层
回复 11# gandeyao


    arm-objdump -d
看不看得出什么要反了来才知道

论坛徽章:
0
发表于 2010-11-05 15:38 |显示全部楼层
回复 12# snail_314


    谢谢! 又学会了一招,但是反汇编了我也看不出有什么异样阿。那里有个跳转 2fc:        ebfffffe         bl        0 <__arm_ioremap>  其他地方也有 但是就是中断里的有问题,会导致kernel崩溃。

论坛徽章:
0
发表于 2010-11-05 15:41 |显示全部楼层
回复 13# gandeyao


    我的意思就是看你出问题的中断程序反出来是什么。

论坛徽章:
0
发表于 2010-11-05 19:30 |显示全部楼层
回复 14# snail_314

    首先,对各位表示感谢!

    问题已经找到。
    我的ioread16(GADCDAT0)展开是ioread16(ioremap(0x5800000c, 2)), 而ioremap(0x5800000c, 2)是一个挺复杂的一系列调用(到内核去看了下)。问题就出现在这里了,估计这个调用可能与中断机制的某些方面冲突了。
    解决办法就是:
    static void  __iomem *data0;
    data0 = ioremap(0x5800000c, 2);

论坛徽章:
0
发表于 2010-11-09 14:40 |显示全部楼层
回复 15# gandeyao


    你的解决办法里面:
   static void  __iomem *data0;
    data0 = ioremap(0x5800000c, 2);

    后面是什么?data0只是一个地址啊

论坛徽章:
0
发表于 2010-11-11 22:33 |显示全部楼层
为什么要把ioremap定义成宏呢,从你的代码中看出,每次中断都调用一次ioremap,如果中断很多,你的kernel肯定会崩溃,因为ioremap需要消耗物理内存,同时也消耗虚拟内存空间

论坛徽章:
0
发表于 2010-11-11 22:34 |显示全部楼层
我还不知道ioremap会不会schedule,如果schedule就肯定会出问题

论坛徽章:
0
发表于 2010-11-11 23:36 |显示全部楼层
楼上说得对, ioremap放在中断会多次map,用不了多久,就会填满内核页表。
ioremap 一般都放在module_init里,在module_exit里放iounmap;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP